fish - 鱼中的命令替换
问题描述
我正在尝试迁移此工作命令
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'
什么是正确的翻译?
解决方案
行为上的差异是因为鱼,理智地,只在行边界上分割命令捕获的输出。而像 bash 这样的 POSIX shell 默认将其拆分为空格。也就是说,POSIX shell 默认分割输出,$(...)
其值为$IFS
空格、制表符和换行符。
有几种方法可以重写该命令,使其适用于鱼。需要最小更改的一个是更改 sed 以在 the-f
和文件名之间插入换行符:
docker-compose (find docker-compose* | sed -e "s/^/-f\n/") up -d --remove-orphans
推荐阅读
- mysql - 从每天的多个 where 条件中选择计数日期
- python - PwnTools recv() 在输出上直接期望输入
- c# - 如何在 WPF 应用程序中读取 Xaml 内容并获取所有 UI 控件属性
- arrays - 如何在从 api 调用映射的变量中组合数组
- java - “折扣”功能无法正常工作
- react-native - React Native 从 url 下载图像并保存在图库中
- branch - 什么时候删除不需要的分支不安全?
- javascript - Exceljs锁定单元格创建空行
- php - 移动到另一台服务器后,wordpress 出现奇怪的错误
- javascript - Twitter API:警告:无法对未安装的组件执行 React 状态更新