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



我想从不同于当前目录的目录中移动一个文件。这就是我想到的解决方案:

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

可能还有更好的方法,但在这一过程中,我发现我对子命令中目录更改的期望是错误的:运行cd会更改执行mv的目录。

那么,有没有一种方法可以只更改当前子命令的目录,而不影响top命令?

没错,我们中的许多人来自像bashzsh这样的Posix shell,他们习惯于使用$()或只使用backticks来运行这样的命令替换,并保持父shell环境不变。这是一个很好的把戏,IMHO。

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

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

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

最新更新