從bash腳本在fish中執行指令?

從bash腳本在fish中執行指令?

我有一個相當長的 bash 腳本用於設定伺服器叢集。我想開始切換到魚解釋器,但我想分步驟進行。我可以按原樣保留 bash 腳本並添加命令fish以切換到 Fish 提示符,而 bash 腳本的其餘部分將執行 Fish 解釋器中的其餘命令,即使它是腳本#!/bin/bash

答案1

如果您認為您可以這樣做:

#!/bin/bash
echo this part is bash commands
for num in {1..10}; do echo $(( num*num )); done
fish
echo this part is fish commands
for num in (seq 10); math $num \* $num; end

那麼不,它不是那樣工作的。這將在腳本中間啟動一個互動式 Fish 會話,當您退出該 Fish 進程時,bash 將嘗試將其餘命令作為 bash 命令執行。您會清楚地看到語法錯誤訊息。

你必須這樣做fish -c 'fish commands ...',但這很容易導致引用地獄。在 bash 腳本中混合語言的最安全方法是使用引號的heredoc。您可以使用環境公開 Fish 部分的 bash 變數。

#!/bin/bash
echo this part is bash commands
for num in {1..10}; do echo $(( num*num )); done
export foo=bar
fish <<'END_FISH'
    echo this part is fish commands
    for num in (seq 10); math $num \* $num; end
    echo the bash variable foo has value $foo
END_FISH

相關內容