Fish 腳本可以區分來源和執行嗎?

Fish 腳本可以區分來源和執行嗎?

我有一個魚腳本,它會導出一些變數並在最後啟動命令。我希望能夠獲取此文件以將這些變數帶入當前 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指令用來處理某個行程的輸出,就好像它是一個檔案一樣。文件

相關內容