GNU/Linux >> Linux の 問題 >  >> Linux

ソーシング(「。」または「ソース」)とBashでのファイルの実行の違いは?

このようなスクリプトを実行することの違いは何ですか:

./ 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

Linux
  1. Linuxは複数の連続したパスセパレーター(/ home //// username /// file)をどのように処理しますか?

  2. ソーシング(「。」または「ソース」)とBashでのファイルの実行の違いは?

  3. [[$ a ==Z*]]と[$a==Z *]の違いは?

  1. / sbin/nologinと/bin/ falseの違いは何ですか?

  2. シンボリックリンクとハードリンクの違いは?

  3. ‘$の違い。 Foo」と「$./foo」??

  1. #!/usr/bin/env bash と #!/usr/bin/bash の違いは何ですか?

  2. fsync と syncfs の違いは何ですか?

  3. bashの&>と>&の違いは何ですか?