微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在与fish 中的当前目录不同的目录中执行子命令?

如何解决在与fish 中的当前目录不同的目录中执行子命令?

我想从与当前目录不同的目录移动文件。这是我想到的解决方案:

mv (cd ~/Downloads; ls -t | head -1 | xargs -I {} readlink -f {}) ./

可能有更好的方法,但一路上我发现我对子命令中目录更改的期望是错误的:运行 cd 更改了正在执行 mv 的目录。

那么,有没有办法只改变当前子命令的目录,而不影响顶部命令?

解决方法

是的,我们中的许多人来自像 bashzsh 这样的 Posix shell 都习惯于能够使用 $() 或只是反引号并离开父 shell 来运行这样的命令替换环境未受影响。这是一个很好的技巧,恕我直言。

另一方面,fish 在使用其命令替换运算符 () 时不会自动创建子 shell。有一个 feature request here ,但解决方法(如建议的那样)相当简单 - 只需在命令替换中显式创建一个子shell。例如:

mv (fish -c 'cd ~/Downloads; ls -t | head -1 | xargs -I {} readlink -f {}') ./

缺点是语法高亮/检查在引用的文本中不起作用,并且引用/转义规则变得更加复杂。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。