回答:
そのコンテキストのドットは、そのファイルの内容を現在のシェルに「ソース」することを意味します。source
自体がシェル組み込みコマンドであること。そして source
、ドット演算子は同義語です。
sample.sh
ファイルに次の内容があったとします。
$ cat sample.sh
echo "hi"
echo "bye?"
今私がそれを調達するとき:
$ . sample.sh
hi
bye?
$
このようなファイルは、環境変数に物事を追加するなどのセットアップコマンドを組み込むためによく使用されます。
これらのコマンドが別のファイルにあったとしaddvars.sh
ます。
$ cat addvars.sh
export VAR1="some var1 string"
export VAR2="some var2 string"
現在のシェルの環境には変数がありません。
$ env | grep VAR
$
さて、このファイルを入手すると:
$ . addvars.sh
$
OK、何もしなかったように見えenv
ますが、変数を再度チェックすると:
$ env | grep VAR
VAR1=some var1 string
VAR2=some var2 string
slmの答えに追加するには:
シェルスクリプトを実行するには2つの方法があります。1つは、別のプロセスでスクリプトを実行することです。つまり、シェルの環境(メモリ状態)については、「子」シェルプロセスを実行する前に「親」シェルの状態に戻ります。
たとえば、現在の作業ディレクトリ(ファイルシステム内の場所)はプロセスごとに決定されます。したがって、次のようなスクリプトを作成しましょう。
#!/bin/bash
cd ~
cd ..
pwd
したがって、このスクリプトを呼び出しましょうfoo
。このスクリプトを次のように実行してみましょう。./foo
以下が表示されます。
/home
(多数のLinuxおよび他のUNIXクローンディストリビューションがあり、そのいくつかはユーザーのディレクトリを配置しないという標準的な免責事項/home
。または、「あなたの走行距離は異なる場合があります」)
さて、このスクリプトを実行した後、このコマンドを入力しましょう
pwd
現在のディレクトリを確認するには、次のように表示されます。
/home/username
理由は、実行したシェルスクリプトには独自の環境(コマンドが実行されていた独自のディレクトリを含む)があり、スクリプトの実行が終了するとその環境がなくなるためです。
さて、foo
このようなスクリプトを実行しましょう
. ./foo
または、同等に:
source ./foo
pwd
後で実行すると、次のように表示されます。
/home
その理由は、スクリプトのソースは別のプロセスを呼び出さないからです。親プロセスのすべてのコマンドを手で入力するようなものです。その環境は、スクリプトの終了後も保持されます。
もっと簡単な例を考えてみましょう。次のようなスクリプトを作成しましょう。
#!/bin/bash
exit
名前を付けましょうfoo
。実行できることを確認しましょう:chmod 755 foo
。次に、次のように実行します。
./foo
何も起こりません。ただし、一方で、これを行う場合:
. ./foo
またはこれ:
source ./foo
ログアウトします。
# type .
. is a shell builtin
# help .
.: . filename [arguments]
Execute commands from a file in the current shell.
Read and execute commands from FILENAME in the current shell. The
entries in $PATH are used to find the directory containing FILENAME.
If any ARGUMENTS are supplied, they become the positional parameters
when FILENAME is executed.
Exit Status:
Returns the status of the last command executed in FILENAME; fails if
FILENAME cannot be read.
。(ソースまたはドット演算子)
現在のシェルコンテキストのファイル名引数からコマンドを読み取り、実行します。
Syntax
. filename [arguments]
source filename [arguments]
sourceは、ドット/ピリオド「。」の同義語です。POSIX shではなくbashであるため、最大限の互換性を得るにはピリオドを使用します。
ソースを使用してスクリプトを実行すると、既存のシェル内で実行され、スクリプトによって作成または変更された変数は、スクリプトの完了後も引き続き使用できます。対照的に、スクリプトがファイル名として実行される場合、スクリプトを実行するために別個のサブシェル(変数の完全に別個のセット)が生成されます。
.ss64script(ドットss64script)とを実行してスクリプトを実行することには微妙な違いがあります。ss64script(ドットスペースss64script)
最初は「ls」コマンドで非表示になっているファイルを実行しています(ls -aは非表示ファイルを表示しますが)、2番目のオプションはchmodで実行可能ファイルとして設定されていない場合でもss64scriptを実行します。
TL; DR
ドットはsourceコマンドと同じです。
sourceは、現在のコンテキストで実行されるコマンドのリストとして、コマンドに続くファイルを評価するUnixコマンドです。