次のスクリプトを実行するときの違いは何ですか?
./test.sh
次のスクリプトを実行します。
. test.sh
?
違いが見つかるかどうかを確認するために、単純な2行のスクリプトを試しました。
#!/bin/bash
ls
ただし、どちらも同じ情報を. test.sh
返します。./test.sh
ベストアンサー1
./test.sh
test.sh
別のプログラムとして実行されます。ファイルが.bashrcでtest.sh
始まる場合は、#!/bin/bash
おそらくbashスクリプトです。しかし、それはまったく異なるものかもしれません。
. ./test.sh
test.sh
実行中のbashインスタンスでファイルコードを実行します。内容ファイルがtest.sh
行ではなくテキストとして含まれているかのように機能します. ./test.sh
。 (ほとんど:$BASH_LINENO
組み込み関数の値や動作など、いくつかの詳細が異なりますreturn
。)
source ./test.sh
bashと同じです(. ./test.sh
他のシェルではsource
わずかに異なるか完全には存在しない可能性があり、.
POSIX標準に含まれています)。
./test.sh
組み込みスクリプトを使用して別々のスクリプトを実行することと組み込みスクリプトを含めることの最も一般的な違いは、スクリプトが.
一部の環境変数を設定する場合、test.sh
別のプロセスでは子プロセスの環境のみが設定されることです。スクリプトには環境変数が設定されます。単独のシェルプロセスが確立されました。呼び出しスクリプトに行を追加し、foo=bar
最後test.sh
にecho $foo
違いを見ることができます。
$ cat test.sh
#!/bin/sh
foo=bar
$ ./test.sh
$ echo $foo
$ . ./test.sh
$ echo $foo
bar