bash シェルを使用する場合、環境変数をテキスト ファイルに保存し、その内容をコピー/貼り付けることがあります (例: exports.txt)。
export FOO=bar
export FIZZ=buzz
誰かがコピー&ペーストの代わりにターミナルに入力する方法を教えてくれました
. exports.txt
コピー/貼り付けと同じ効果が得られます。
この「ドット スペース ファイル名」コマンドが機能するメカニズムは何ですか? 検索用語を考えるのは難しいです。
何が起こっているのか、そしてこのワンライナーが何をしているのかについてのより一般的な詳細を理解したいと思います。
答え1
(「ドット」)コマンド.
は、シェルの組み込みsource
コマンドの同義語/ショートカットです。
これにより、指定されたシェル スクリプトが (サブシェルではなく) 現在のシェル コンテキスト内で読み込まれ、実行されます。これにより、ソース スクリプトは、変数の設定やシェル関数およびエイリアスの定義など、呼び出し元シェルの環境を変更できます。
答え2
既存の 2 つの回答はすでに優れていますが、効果が最も「顕著」であると言える例が欠けているように感じます。
script.sh
次のような内容のファイルがあるとします。
cd dir
このスクリプトを通常どおり実行すると ( sh script.sh
)、次のように表示されます。
olle@OMK2-SERVER:~$ sh script.sh
olle@OMK2-SERVER:~$
しかし、スクリプト ( . script.sh
) のソースをどこにするかを指定すると、次のようになります。
olle@OMK2-SERVER:~$ . script.sh
olle@OMK2-SERVER:~/dir$
2 番目のケースでは、メイン シェルの作業ディレクトリがどのように変更されたかに注目してください。
これは、(他の回答で指摘されているように) 最初の例が独自のサブシェル ( - コマンドsh
で開始するプロセスsh
。これは基本的に任意のシェル、、、など) で実行されbash
、dash
そこでディレクトリを変更し、何もせずに閉じるためです。一方、2 番目の例はメイン シェルで実行されるため、そこでディレクトリが変更されます。
答え3
ここに例があります。
スクリプトファイル: mytest.sh
cat mytest.sh
#!/bin/bash
myvar=1
mystring="Hello World"
上記の変数のいずれかを印刷しようとすると何も返されません
echo $myvar
しかし、もしそうするなら
. mytest.sh
または
source mytest.sh
その後
echo $myvar
1が印刷されます
Spiffが書いたことに対する視覚的な答え