Linuxシェルにログインすると、特定の作業環境を継承します。 環境 、シェルのコンテキストでは、コマンドが意図したとおりに機能することを保証する特定の変数がすでに設定されていることを意味します。たとえば、PATH環境変数は、シェルがコマンドを探す場所を定義します。これがないと、Bashで実行しようとするほとんどすべてが、コマンドが見つかりませんで失敗します。 エラー。あなたの環境は、あなたが日常の仕事をしている間はほとんど見えませんが、非常に重要です。
シェル環境に影響を与える方法はたくさんあります。 〜/ .bashrc
などの構成ファイルに変更を加えることができます および〜/ .profile
、起動時にサービスを実行したり、独自のカスタムコマンドを作成したり、独自のBash関数をスクリプト化したりできます。
Bash(および他のいくつかのシェル)には、 source
と呼ばれる組み込みコマンドがあります。 。そして、ここで混乱する可能性があります: source
コマンド。
と同じ機能を実行します (はい、それは1つのドットにすぎません)、そしてそれはではありません 同じソース
Tcl
として コマンド( man source
と入力すると、画面に表示される場合があります )。組み込みのソース
コマンドがPATH
にありません 実際には、まったく。これはBashの一部として含まれているコマンドであり、それに関する詳細情報を取得するには、 help source
と入力します。 。
。コード> コマンドはPOSIXに準拠しています。
ソース
コマンドはPOSIXで定義されていませんが、。
と互換性があります。 コマンド。
Bashの詳細
- バッシュチートシート
- Bashを使用したプログラミングの概要
- Bashスクリプトに関するシステム管理者ガイド
- 最新のBash記事
Bashによるとhelp
、 source
コマンドは、現在のシェルでファイルを実行します。 「現在のシェル内」という句は、サブシェルを起動しないことを意味するため、重要です。したがって、 source
で実行するものは何でも 現在内で発生し、影響します 環境。
source
の方法を調べる前に 環境に影響を与える可能性がある場合は、 source
を試してください テストファイルで、期待どおりにコードが実行されることを確認します。まず、簡単なBashスクリプトを作成し、 hello.sh
というファイルとして保存します。 :
#!/usr/bin/env bash
echo "hello world"
source
を使用する 、実行可能ビットを設定しなくても、このスクリプトを実行できます:
$ source hello.sh
hello world
組み込みの。
を使用することもできます 同じ結果を得るコマンド:
$ . hello.sh
hello world
ソース
および。
コマンドはテストファイルの内容を正常に実行します。
source
を使用できます include
を使用するのと同じように、ファイルをシェル環境に「インポート」します。 ライブラリまたはimport
を参照するためのCまたはC++のキーワード モジュールを取り込むためのPythonのキーワード。これは、 source
の最も一般的な使用法の1つです。 、これは .bashrc
に含まれる一般的なデフォルトです。 source
へのファイル .bash_aliases
というファイル ログイン時に、定義したカスタムエイリアスが環境にインポートされるようにします。
Bash関数をインポートする例を次に示します。まず、 myfunctions
というファイルに関数を作成します 。これにより、パブリックIPアドレスとローカルIPアドレスが出力されます:
function myip() {
curl http://icanhazip.com
ip addr | grep inet$IP | \
cut -d"/" -f 1 | \
grep -v 127\.0 | \
grep -v \:\:1 | \
awk '{$1=$1};1'
}
関数をシェルにインポートします:
$ source myfunctions
新しい機能をテストします:
$ myip
93.184.216.34
inet 192.168.0.23
inet6 fbd4:e85f:49c:2121:ce12:ef79:0e77:59d1
inet 10.8.42.38
source
を使用する場合 Bashでは、現在のディレクトリで参照しているファイルを検索します。これはすべてのシェルで発生するわけではないため、Bashを使用していない場合はドキュメントを確認してください。
実行するファイルが見つからない場合、Bashは PATH
を検索します 代わりは。繰り返しになりますが、これはすべてのシェルのデフォルトではないため、Bashを使用していない場合はドキュメントを確認してください。
これらは両方ともBashの便利な機能です。この動作は、一般的な機能をドライブの中央の場所に保存し、環境を統合開発環境(IDE)のように扱うことができるため、驚くほど強力です。関数がローカルで同等の/usr / include
にあることがわかっているので、関数がどこに格納されているかを心配する必要はありません。 、したがって、それらを調達するときにどこにいても、Bashはそれらを見つけます。
たとえば、〜/ .local / include
というディレクトリを作成できます。 一般的な関数のストレージ領域として、このコードブロックを .bashrc
に配置します ファイル:
for i in $HOME/.local/include/*;
do source $i
done
これにより、〜/ .local / include
にカスタム関数を含むすべてのファイルが「インポート」されます。 シェル環境に。
Bashは、現在のディレクトリと PATH
の両方を検索する唯一のシェルです。 source
のいずれかを使用する場合 または。
コマンド。
source
を使用する または。
ファイルを実行することは、変更をモジュール化したまま、環境に影響を与える便利な方法です。次回、コードの大きなブロックをコピーして .bashrc
に貼り付けることを考えているとき ファイルを作成し、関連する関数またはエイリアスのグループを専用ファイルに配置してから、 source
を使用することを検討してください。 それらを摂取する。