鱼中的命令替换
Command substitution in fish
我正在尝试迁移这个工作命令
docker-compose $(find docker-compose* | sed -e "s/^/-f /") up -d --remove-orphans
从 bash 到钓鱼。这个命令的目的是得到这个
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 默认将它拆分为白色 space。也就是说,POSIX shell 在 $IFS
的值上拆分 $(...)
的输出,默认情况下是 space、制表符和换行符。
有几种方法可以重写该命令,使其在 fish 中工作。需要最小更改的是更改 sed 以在 -f
和文件名之间插入换行符:
docker-compose (find docker-compose* | sed -e "s/^/-f\n/") up -d --remove-orphans
我正在尝试迁移这个工作命令
docker-compose $(find docker-compose* | sed -e "s/^/-f /") up -d --remove-orphans
从 bash 到钓鱼。这个命令的目的是得到这个
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 默认将它拆分为白色 space。也就是说,POSIX shell 在 $IFS
的值上拆分 $(...)
的输出,默认情况下是 space、制表符和换行符。
有几种方法可以重写该命令,使其在 fish 中工作。需要最小更改的是更改 sed 以在 -f
和文件名之间插入换行符:
docker-compose (find docker-compose* | sed -e "s/^/-f\n/") up -d --remove-orphans