4

次のようなスクリプトの実行の違いは何ですか

# ./test

# . ./test 

テストは、たとえば単純なスクリプトです

#!/bin/bash
export OWNER_NAME="ANGEL 12"
export ALIAS="angelique"

結果はわかっていますが、実際に何が起こっているのかわかりません

ありがとう

4

3 に答える 3

7

./foo実行foo可能としてマークされ、適切なシバン行がある(またはELFバイナリである)場合に実行されます。新しいプロセスで実行されます。

. ./fooまたは、現在のシェル. fooにスクリプトをロードします。それは等しいsource foo

サンプルコードでは、エクスポートされた変数をシェルで使用できるようにする場合は、2番目の方法を使用する必要があります。

于 2012-01-26T11:59:22.220 に答える
2

ドットだけで、bashは指定されたファイルを「ソーシング」します。これはsourceビルトインと同等であり、同じシェルプロセス内にスクリプトを含めて実行しようとします。

./新しいプロセスを開始し、現在のシェルプロセスはそれが終了するのを待ちます。

于 2012-01-26T11:59:04.253 に答える
0

1つ目は、スクリプト(またはバイナリ)が実行可能であることを意味します。使用するインタプリタを指示するシバン行を含むスクリプト(おそらく)。

2つ目は、「[引数]をシェルスクリプトとして実行する」の省略形です。引数として渡されるファイルには、実行可能ビットセットは必要ありません。

于 2012-01-26T12:00:35.853 に答える