Fish

為什麼 set -x 在fish的函式中的 eval 中不起作用?

  • January 31, 2015

我遇到了一個問題,試圖在fish函式中根據程序的輸出動態設置一些變數。

我將問題縮小到 MWE:

function example
   eval (echo 'set -x FOO 1;')
end

呼叫:

>example
>echo $FOO

導致無輸出——即尚未設置 FOO 環境變數。我應該怎麼做?

同樣的事情以更簡單的形式發生:

function trythis
    set -x foo bar
end

如果您現在執行trythisand echo $foo,它也沒有設置。這是因為 fish-x本身並不會改變變數的範圍,預設情況下它是函式的局部變數,除非它已經全域或普遍存在。

嘗試:

 eval (echo 'set -gx FOO 1;') 

哪裡g是全球性的。這使得變數像正常的 POSIX exported 值一樣工作。有趣的是,它的工作方式與evalplain的工作方式相同set;如果您g在命令行上直接使用該行,$FOO則設置,因此eval程序替換()沒有引入新的範圍或子shell,並且當在函式中以這種方式執行時,函式的範圍適用。

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