次のようなスクリプトの実行の違いは何ですか
# ./test
と
# . ./test
テストは、たとえば単純なスクリプトです
#!/bin/bash
export OWNER_NAME="ANGEL 12"
export ALIAS="angelique"
結果はわかっていますが、実際に何が起こっているのかわかりません
ありがとう
次のようなスクリプトの実行の違いは何ですか
# ./test
と
# . ./test
テストは、たとえば単純なスクリプトです
#!/bin/bash
export OWNER_NAME="ANGEL 12"
export ALIAS="angelique"
結果はわかっていますが、実際に何が起こっているのかわかりません
ありがとう
./foo
実行foo
可能としてマークされ、適切なシバン行がある(またはELFバイナリである)場合に実行されます。新しいプロセスで実行されます。
. ./foo
または、現在のシェル. foo
にスクリプトをロードします。それは等しいsource foo
サンプルコードでは、エクスポートされた変数をシェルで使用できるようにする場合は、2番目の方法を使用する必要があります。
ドットだけで、bashは指定されたファイルを「ソーシング」します。これはsource
ビルトインと同等であり、同じシェルプロセス内にスクリプトを含めて実行しようとします。
は./
新しいプロセスを開始し、現在のシェルプロセスはそれが終了するのを待ちます。
1つ目は、スクリプト(またはバイナリ)が実行可能であることを意味します。使用するインタプリタを指示するシバン行を含むスクリプト(おそらく)。
2つ目は、「[引数]をシェルスクリプトとして実行する」の省略形です。引数として渡されるファイルには、実行可能ビットセットは必要ありません。