このようなスクリプトを実行することの違いは何ですか:
./ test.sh
次のようなスクリプトを実行します:
。 test.sh
?
簡単な2行のスクリプトを試して、違いがあるかどうかを確認しました。
#!/bin/bash
ls
しかし、両方の。 test.sh
および./test.sh
同じ情報を返しました。
承認された回答:
./ test.sh
test.sh
を実行します 別のプログラムとして。ファイルtest.sh
の場合、bashスクリプトである可能性があります。 #!/ bin / bash
で始まります 。しかし、それはまったく別のものである可能性があります。
。 ./test.sh
ファイルtest.sh
のコードを実行します bashの実行中のインスタンス内。コンテンツファイルtest.sh
のように機能します の代わりにテキストで含まれていました。 ./test.sh
ライン。 (ほとんど: $ BASH_LINENO
の値など、異なる詳細がいくつかあります 、および return
の動作 組み込み。)
source ./test.sh
と同じです。 ./test.sh
bashで(他のシェルでは、 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