Linuxシェルにログインすると、特定の作業環境を継承します。シェルにとって "" は、コマンドが期待通りに動作するように、特定の変数が設定されていることを意味します。例えば、 環境変数はシェルがコマンドを探す場所を定義します。これがないと、Bash で実行しようとするほとんどのことが "command not found" エラーで失敗します。環境変数は、日常的なタスクの実行時にはほとんど目に見えませんが、重要なものです。
シェル環境に影響を与える方法はいくつもあります。~/.bashrc や ~/.profile などの設定ファイルを変更したり、起動時にサービスを実行したり、独自のカスタムコマンドを作成したり、独自の 書いたりできます。
ソース経由で環境に追加
Bashにはsourceという組み込みコマンドがあります。sourceは.NETコマンドと同じ機能を実行しますが、Tclコマンドのsourceとは異なります。 sourceは.コマンドと同じ機能を実行しますが、Tclコマンドのsourceとは異なります。実際、組み込みのsourceコマンドはPATHには全くありません。このコマンドの詳細については、help sourceと入力してください。
. コマンドは PATHです。 しかし、sourceコマンドはPOSIXで定義されていませんが、. コマンドと同じように使用できます。
Bashのヘルプによると、sourceコマンドは現在のシェルでファイルを実行します。 現在のシェルで」という表現が重要なのは、サブシェルを起動しないという意味なので、source で行うことはすべて内部で発生し、環境に影響するからです。
ソースが環境に与える影響を調べるには、source コマンドを使用してテスト・ファイルをインポートし、期待どおりにコードが実行されることを確認します。まず、簡単な Bash スクリプトを作成し、hello.sh という名前で保存します:
#!/usr/bin/env bash
echo "hello world"
source指定すると、スクリプトが実行可能に設定されていなくても実行できます:
$ source hello.sh
hello world
また、組み込みの. コマンドを使っても同じ結果が得られます:
$ . hello.sh
hello world
$ . hello.sh. コマンドはテスト・ファイルの内容を正常に実行しました。
変数の設定と関数のインポート
C や C++ で include キーワードを使ってライブラリを参照したり、Python で import キーワードを使ってモジュールを導入したりするのと同じように、source を使ってシェル環境にファイルを「インポート」することができます。これは source の最も一般的な使い方の 1 つで、.bashrc のデフォルトのインクルードでもあります。.bash_aliases をインポートして、ログイン時にカスタマイズしたエイリアスを環境にインポートします。
これはBash関数をインポートする例です。まず、myfunctionsというファイルに関数を作成します。これはパブリックIPアドレスとローカルIPアドレスを表示します:
function myip() {
curl <http://.>
ip addr | grep inet$IP | \
cut -d"/" -f 1 | \
grep -v 127\\.0 | \
grep -v \:\:1 | \
awk '{$1=$1};1'
この関数をシェルにインポートします:
$ source myfunctions
新しい関数をテストします:
.216.34
inet .0.23
inet6 fbd4:e85f:49c:2121:ce12:ef:59d1
inet .38
source
Bashでsourceを使用すると、参照するファイルをカレントディレクトリから検索します。これはすべてのシェルに当てはまるわけではないので、Bashを使用していない場合はドキュメントを確認してください。
Bashは実行するファイルが見つからない場合、PATHを検索します。繰り返しますが、これはすべてのシェルのデフォルト設定ではないので、Bashを使用していない場合はドキュメントを確認してください。
これらはBashの便利な機能です。これは驚くほど強力で、よく使う関数をディスク上の一元化された場所に保存し、その環境をIDEとして扱うことができます。関数がどこに保存されているか心配する必要はありません。なぜなら、関数はローカルでは/usr/includeの下にあるのと同じことなので、どこにいてもBashが関数をインポートするときに見つけることができるからです。
例えば、共通関数ストアとして ~/.local/include ディレクトリを作成し、このコードブロックを.bashrcファイルに記述します:
for i in $HOME/.local/include/*;
do source $i
これは、カスタム関数を含む ~/.local/include 内のすべてのファイルをシェル環境に「インポート」します。
sourceや.NETコマンドを使用する際に、カレントディレクトリとPATHを検索するシェルはBashだけです。 コマンドを使用した場合、BashはカレントディレクトリとPATHを検索する唯一のシェルです。
オープンソースにソースを使用
ソースや. を使ってファイルを実行することは、変更をモジュール化したまま環境に影響を与える便利な方法です。次に.bashrcファイルに大量のコードをコピー&ペーストしようと考えている場合は、関連する関数やエイリアスグループを専用のファイルに配置し、sourceを使用してインポートすることを検討してください。





