【问题标题】:execute a subcommand in a different directory as the current one in fish?在不同的目录中执行一个子命令作为鱼中的当前命令?
【发布时间】:2021-07-23 03:33:08
【问题描述】:

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

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

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

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

【问题讨论】:

  • 有点边界,因为它有点关于“shell脚本”,但我真的推荐这种类型的“一般fish使用”问题Unix and Linux Stack而不是 Stack Overflow(用于“编程问题”)。请注意,以防你被否决,其他人可能不会觉得它很“边缘”。
  • 在我看来主题坚定

标签: shell fish subcommand


【解决方案1】:

是的,我们中的许多人都来自 bashzsh 这样的 Posix shell,他们习惯于使用 $() 运行这样的命令替换,或者只是反引号并保持父 shell 环境不变。这是一个不错的技巧,恕我直言。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-17
    • 1970-01-01
    • 1970-01-01
    • 2014-04-16
    • 2012-10-16
    • 1970-01-01
    • 2017-12-31
    • 1970-01-01
    相关资源
    最近更新 更多