
我有一個魚腳本,它會導出一些變數並在最後啟動命令。我希望能夠獲取此文件以將這些變數帶入當前 shell 會話,但最後不執行命令。
問題:我可以判斷目前文件是正在執行還是來自文件內部?
答案1
您可以使用$_
環境變數來查看您的腳本是否正在由以下source
命令「執行」:
#!/bin/fish
if test "$_" = source
echo got sourced
else
echo was execed
end
答案2
您可以使用$_
環境變數來查看命令是否正在「執行」您的腳本source
。請注意,該source
命令有一個公共別名 (" .
"),因此您必須$_
根據source
和來檢查環境變數.
。
#!/bin/fish
if test "$_" != "source" -a "$_" != "."
echo "not sourced"
else
echo "was sourced"
end
其常見用途可能是向使用者發出警告,前提是腳本未來源:
if test "$_" != "source" -a "$_" != "."
echo "Run this script with \". ./activate.fish\" (aka: \"source ./activate.fish\")."
exit 1
end
當然,替換activate.fish
為您的腳本的名稱。
答案3
我認為您誤解了腳本“來源”的作用。通常,執行腳本會在單獨的進程中執行它。採購它將在以下位置執行:目前外殼。它仍然會執行每一行。
也許您想要做的就是過濾掉最後一行。嘗試:
source (sed '$d' filename | psub)
這個psub
指令用來處理某個行程的輸出,就好像它是一個檔案一樣。文件