问题描述
我正在尝试迁移此工作命令
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 在默认情况下将其拆分为空格。也就是说,POSIX shell 会根据 $(...)
的值(默认为空格、制表符和换行符)拆分 $IFS
的输出。
有几种方法可以重写该命令,使其适用于fish。需要最小更改的是更改 sed 以在 -f
和文件名之间插入换行符:
docker-compose (find docker-compose* | sed -e "s/^/-f\n/") up -d --remove-orphans