./scriptと./scriptの違いは何ですか? 。 /スクリプト? [コピー]

./scriptと./scriptの違いは何ですか? 。 /スクリプト? [コピー]

重複の可能性:
使用'。 'Bashでファイルを実行する

.bashrcファイルを変更せずにスクリプトを介して環境をエクスポートする方法を見つけようとしています。

私が見つけたこの古い便利な投稿それは言った:

変数はスレーブプロセスにのみエクスポートでき、親プロセスに戻すことはできません。スクリプトが親シェルの環境に影響を与えるようにするには、スクリプトを実行します。

. ./yourprogram

. ./scriptとの違いが何なのか知りたいです./script

私が見たときに現在のディレクトリからスクリプトを実行することは私にとって何を意味しますか?

答え1

./scriptその場所で「script」というファイルを実行します./。これは「ここ」(つまり、現在のディレクトリ)に変換されます。スクリプトはサブシェルで実行され、サブシェルが終了すると、スクリプトが環境で実行したすべての操作が失われます。

. ./script./現在のシェルに「script」というファイルを実行するように指示します。現在のシェルにはサブシェルがないため、環境で行われたすべての変更はスクリプトが停止しても保持されます。

.コマンドの略語ですsource。 man()を使用してソースコードを見つけることができますman source

/home/bob/script./scriptまるであなたがディレクトリにいると思います。/home/bob

. /home/bob/script. ./scriptまるであなたがディレクトリにいると思います。/home/bob

答え2

./scriptscriptこれは、現在のディレクトリでファイルを実行していることを意味します。通常、スクリプトを実行すると最初にシェルが呼び出されますfork()exec()つまり、スクリプトはサブプロセス(つまりサブシェル)で実行されます。

. ./scriptこれは、source ./script現在のシェルでスクリプトを実行せずに実行することを意味します。fork()

答え3

最初はシェルコマンドで、.次はパスです。二つ目はただの道です。

シェルコマンドは、.後続のファイルを現在のシェルセッションに「ソース」します。したがって、設定された変数は./yourprogram実行中のセッションまたはスクリプトに表示されます. ./yourprogram

一方、2番目のコマンドは単に./yourprogram実行を要求します。これは適切な実行権限がある場合にのみ機能./yourprogramします。

  1. バイナリファイル
  2. #!/bin/shまたは、「shebang」行で始まる言語のスクリプト#!/usr/bin/python
  3. または、現在のシェル言語のスクリプトにshebang行がありませんが、この場合、現在のシェルはデフォルトでサブシェルからスクリプトファイルを実行します。

./yourprogramこれらのイベント中は、呼び出しスクリプトまたはセッションにシェル/環境変数への変更は表示されません。

関連情報