在fish函数中执行bash命令

在fish函数中执行bash命令

我决定尝试 Fish shell,但我在使用一些别名时遇到了问题。所以我想最简单的方法是在 Fish shell 函数中执行 bash 命令。像这样的东西:

function fish_function
start bash
    ... bash commands ... 
stop bash
end

那可能吗?

例如:命令

pacman -Qtdq && sudo pacman -Rns $(pacman -Qtdq) 

在 Fish shell 中不起作用,我不知道如何转换它

答案1

显然Fish 用于; and&&用于()命令替换。

所以只需将命令更改为

pacman -Qtdq; and sudo pacman -Rns (pacman -Qtdq)

应该管用。


回答实际的问题,通常你可以通过任何方式将语句重定向到bash命令的 STDIN 来获得要在 Bash 中执行的语句(请注意,我使用的是 Zsh,它支持此处的字符串,并且该语句打印的内容特定于 Bash 的变量):

% <<<'echo $BASH' bash
/bin/bash

不过,作为一般规则,我建议使用bashs-c选项。例如,这里的字符串和管道不能很好地处理多个命令,这里的文档将由当前 shell 扩展,等等(尽管如此,这些需要当前 shell 的支持)。

总的来说bash -c似乎总是一个安全的选择:

bash -c 'pacman -Qtdq && sudo pacman -Rns $(pacman -Qtdq)'

对于多个命令来说,它会变成这样:

bash -c '
command1
command2
command3
'

相关内容