ソース("."または"source")とbashでのファイル実行の違いは何ですか?

ソース(

次のスクリプトを実行するときの違いは何ですか?

./test.sh

次のスクリプトを実行します。

. test.sh

違いが見つかるかどうかを確認するために、単純な2行のスクリプトを試しました。

#!/bin/bash
ls

ただし、どちらも同じ情報を. test.sh返します。./test.sh

ベストアンサー1

./test.shtest.sh別のプログラムとして実行されます。ファイルが.bashrcでtest.sh始まる場合は、#!/bin/bashおそらくbashスクリプトです。しかし、それはまったく異なるものかもしれません。

. ./test.shtest.sh実行中のbashインスタンスでファイルコードを実行します。内容ファイルがtest.sh行ではなくテキストとして含まれているかのように機能します. ./test.sh。 (ほとんど:$BASH_LINENO組み込み関数の値や動作など、いくつかの詳細が異なりますreturn。)

source ./test.shbashと同じです(. ./test.sh他のシェルではsourceわずかに異なるか完全には存在しない可能性があり、.POSIX標準に含まれています)。

./test.sh組み込みスクリプトを使用して別々のスクリプトを実行することと組み込みスクリプトを含めることの最も一般的な違いは、スクリプトが.一部の環境変数を設定する場合、test.sh別のプロセスでは子プロセスの環境のみが設定されることです。スクリプトには環境変数が設定されます。単独のシェルプロセスが確立されました。呼び出しスクリプトに行を追加し、foo=bar最後test.shecho $foo違いを見ることができます。

$ cat test.sh
#!/bin/sh
foo=bar
$ ./test.sh
$ echo $foo

$ . ./test.sh
$ echo $foo
bar

おすすめ記事