首页 > 解决方案 > 鱼中的命令替换

问题描述

我正在尝试迁移此工作命令

docker-compose $(find docker-compose* | sed -e "s/^/-f /") up -d --remove-orphans

从 bash 到 fish。这个命令的目的是得到这个

docker-compose -f docker-compose.backups.yml ... -f docker-compose.wiki.yml up -d --remove-orphans

我天真的尝试

docker-compose (find docker-compose* | sed -e "s/^/-f /") up -d --remove-orphans

不工作,但。错误是:

ERROR: .FileNotFoundError: [Errno 2] No such file or directory: './ docker-compose.backups.yml'

什么是正确的翻译?

标签: fish

解决方案


行为上的差异是因为鱼,理智地,只在行边界上分割命令捕获的输出。而像 bash 这样的 POSIX shell 默认将其拆分为空格。也就是说,POSIX shell 默认分割输出,$(...)其值为$IFS空格、制表符和换行符。

有几种方法可以重写该命令,使其适用于鱼。需要最小更改的一个是更改 sed 以在 the-f和文件名之间插入换行符:

docker-compose (find docker-compose* | sed -e "s/^/-f\n/") up -d --remove-orphans

推荐阅读