shell - 在不同的目录中执行子命令作为鱼中的当前命令?
问题描述
我想从与当前目录不同的目录中移动文件。这是我想到的解决方案:
mv (cd ~/Downloads; ls -t | head -1 | xargs -I {} readlink -f {}) ./
可能有更好的方法,但在此过程中,我发现我对保留在子命令中的目录更改的期望是错误的:运行 cd 会更改mv
正在执行的目录。
那么,有没有办法只为当前子命令更改目录,而不影响顶部命令?
解决方案
是的,我们中的许多人来自 Posix shell,喜欢bash
或zsh
习惯于能够使用$()
或仅使用反引号来运行这样的命令替换,并且保持父 shell 环境不变。这是一个不错的技巧,恕我直言。
另一方面,fish
在使用命令替换操作符时不会自动创建子shell ()
。这里有一个功能请求,但解决方法(如那里所建议的那样)相当简单——只需在命令替换中显式创建一个子shell。例如:
mv (fish -c 'cd ~/Downloads; ls -t | head -1 | xargs -I {} readlink -f {}') ./
缺点是语法高亮/检查在引用的文本中不起作用,并且引用/转义规则变得更加复杂。
推荐阅读
- android - 分页 Recyclerview 的增量页面索引
- python - 不完整的python代码没有执行
- rest - 如何使用 Outlook rest api v1.0 发送多个“致收件人”的电子邮件
- vba - Excel 单元格值根据其他单元格值更改
- java - 包含 onTouchListener 时,OnclickListener 不起作用
- sql - 如何在数据库二叉树中找到没有根的节点
- php - sql和数据库连接问题?
- php - 从 4 输入表单为 MySQL 插入和更新创建循环
- javafx - 将 java fx 代码转换为 java scenebuilder
- css - 我如何正确使用引导程序混合进行框阴影和过渡?