Fish

在fish函式中執行bash命令

  • March 5, 2016

我決定嘗試使用fish shell,但我遇到了一些別名問題。所以我想最簡單的方法是在fish shell函式中執行bash命令。類似的東西:

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

那可能嗎?

例如:命令

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

在fish shell中不起作用,我不知道如何轉換它

顯然fish 使用; andfor&&()for 命令替換。

所以只需將命令更改為

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

應該管用。


回答實際問題,通常您可以通過將語句重定向到bash命令的 STDIN 以任何方式簡單地在 Bash 中執行語句(注意我在 Zsh 上,它支持這裡的字元串,並且該語句列印內容特定於 Bash 的變數):

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

但是,作為一般規則,我建議使用bash-c選項。例如這裡的字元串和管道不能很好地與多個命令一起使用,這裡的文件將被目前的 shell 擴展,等等(儘管這些需要目前的 shell 支持)。

總的來說bash -c,似乎總是一個安全的賭注:

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

對於多個命令,它變成了這樣:

bash -c '
command1
command2
command3
'

引用自:https://unix.stackexchange.com/questions/267683