
いくつかの変数をエクスポートし、最後にコマンドを起動する fish スクリプトがあります。このファイルをソースにして、これらの変数を現在のシェル セッションに取り込み、最後にコマンドを実行しないようにしたいと思います。
質問: 現在のファイルが実行中か、ファイル内からソース化されているかを確認できますか?
答え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
コマンドは、何らかのプロセスの出力をファイルであるかのように処理するために使用されます。ドキュメンテーション