ソースコマンド Linuxの場合 は、システム管理者が毎日実行する非常に人気のある機能です。
しかし、ソースコマンドの機能は何ですか?
現在のシェル環境を更新するために使用されます 、sourceコマンドは、関数を他のbashスクリプトにインポートするためにも使用できます。 またはスクリプトを実行する 現在のシェル環境に。
今日のチュートリアルでは、Linuxでsourceコマンドをどのように使用するかを見ていきます。
コマンドはGNOMEを使用するDebian10環境で実行されますが、すべてのディストリビューションで機能します。
ソースコマンドの内部
始める前に、環境変数とシェル変数が何であるかを完全に理解することが重要です。
デフォルトでは、Linuxでは、システムは、使用するシェル、ホスト名、現在のユーザー名などのさまざまな情報を格納するための環境変数をすでにいくつか所有しています。
環境変数はシステムによって初期化され、システム上のすべてのプロセスに継承されます。結果として、シェルインスタンスを実行しているときは、システム上の環境変数の値を取得する必要があります。
$ echo $USER
devconnected
一方、シェル変数は、シェルインスタンスのコンテキスト内で宣言された変数です。 また、他のシェルや子プロセスとは共有されません。
$ VARIABLE=devconnected
$ echo $VARIABLE
devconnected
Linuxでは、スクリプトを実行すると、ほとんどの場合、サブシェルで実行されます。
結果として、最初のシェルで定義された変数をスクリプトで実行することはできなくなります。それらは単に同じ環境を共有しません。
これがソースコマンドが解決するものです。
sourceコマンドは、現在の実行のコンテキストで引数として渡されたファイルを評価するために使用されます。 「。」と短縮されたsourceコマンドは、主にターミナルウィンドウで実行されるシェルのコンテキストで使用されます。
$ source filename [arguments]
引数を指定すると、指定したスクリプトの位置パラメータとして設定されることに注意してください。
注 :ソースドキュメントはbashドキュメント内にあります。これを読むには、「man bash」と入力して、ソースコマンドの段落を検索します。

現在のシェル環境を更新するためのソース(.bashrc)
sourceを使用する主な理由の1つは、bashrcファイルを実行して現在のシェル環境を更新することです。
念のため、.bashrcは、対話型シェルインスタンスを起動するたびに実行されるスクリプトファイルです。
これはユーザーごとに定義され、ホームディレクトリにあります。
たとえば、シェル環境に新しいエイリアスを追加したいとします。
.bashrcファイルとその新しいエントリを開きます。
alias ll='ls -l'
次に、新しいエイリアスコマンドをターミナルで直接実行してみます。

ご覧のとおり、変更は現在の環境に直接適用されていません。
適用する変更については、.bashrcを使用してsourceコマンドを実行します 引数としてファイル。
$ source ~/.bashrc
別の方法は、ドット構文で実行することです
$ . ~/.bashrc
エイリアスを再度実行しようとすると、実行できるはずです

現在のコンテキストでスクリプトを実行するためのソース
前に説明したように、sourceコマンドを使用して、現在の環境のコンテキストでスクリプトを実行することができます。 。
この点を説明するために、現在のシェル環境でローカルシェル変数を定義しましょう。
$ VARIABLE=devconnected
次に、新しいスクリプトを作成して、次のコンテンツを貼り付けます
#!/bin/bash
echo $VARIABLE
echo $LOGNAME
VARIABLE変数は、以前に作成したローカルシェル変数を表し、LOGNAME変数はホスト上の環境変数です。
スクリプトを保存し、新しく作成したスクリプトに実行権限を付与します(このコマンドを実行するにはsudo権限が必要です)
$ sudo chmod ugo+x <script>
スクリプトを実行しようとすると、次の結果が表示されます

ご覧のとおり、$VARIABLEローカル変数は標準出力に出力されませんでした。
これは、スクリプトが独自のローカル変数のセットを持つサブシェルで実行されたためです。ただし、環境変数は出力されました。
現在のシェルのコンテキストでこのスクリプトを実行するために、sourceコマンドを使用します。

ご覧のとおり、この場合、$VARIABLE変数は標準出力に正しく出力されました。
スクリプト関数をインポートするためのソース
sourceコマンドの優れた機能の1つは、スクリプト関数を更新して、既存のシェル関数の再利用性を高めることです。
この点を説明するために、現在のユーザーを標準出力に出力する関数の例を見てみましょう。
新しいスクリプトファイルを作成し、その中に次のコンテンツを貼り付けます。
$ nano script
#!/bin/bash
# Print the current user to the standard output
printUser() {
echo $USER
}
printUser関数をインポートするには、別のスクリプトを作成し、source関数を使用します。
$ nano import-script
#!/bin/bash
source ./script
printUser
実行するファイルに正しい権限を割り当てます。インポートする関数を含むファイルの実行権限は必要ありません。
$ sudo chmod u+x import-script
$ ./import-script
これが画面に表示されるはずです。

ご覧のとおり、関数は正しくインポートおよび実行され、ホストの現在のユーザーの名前が出力されています。
ファイルから変数を読み取るためのソース
Linuxでのsourceコマンドのもう1つの優れた使用法は、ファイルから変数を読み取ることです。
たとえば、「変数」という名前のファイルに次の内容のファイルがあるとします。 「
NAME=devconnected
WEBSITE=devconnected.com
DESCRIPTION="best educational website online"
別のスクリプトファイルでは、sourceコマンドを使用して変数を読み取ることにより、これらの変数を使用できます。
スクリプトを作成し、その中に次のコンテンツを貼り付けます。
$ nano variable-script
#!/bin/bash
source ./variables
echo $NAME is a website located at $WEBSITE and it is probably the $DESCRIPTION

トラブルシューティング
場合によっては、sourceコマンドを使用してファイルをソースしようとするとエラーが発生することがあります。
これは、ファイルを調達しようとしたときによくあるエラーのリストです。
Linuxでソースコマンドが見つかりません
場合によっては、このエラーが発生する可能性があります
$ source: command not found
または、sudoを使用すると、ソースコマンドが見つからないというエラーが発生する場合もあります。
$ sudo: source: command not found
ここでの簡単な修正は、「su」を使用してrootユーザーとしてコマンドを実行することです。
$ sudo -s
$ source .bashrc
ソースコマンドと同等の「ドット構文」を使用することもできることに注意してください。
$ . .bashrc
結論
今日のチュートリアルでは、Linuxでのソースコマンドとは何か、そして現在の環境のコンテキストでスクリプトを実行するためにどのように使用できるかを学びました。
また、関数や変数を単純なファイルからスクリプトファイルにインポートするために使用できることも学びました。
Linuxシステム管理に関連するチュートリアルがさらに必要な場合は、devconnectedに専用の完全なカテゴリがあります。下の画像をクリックして読んでください。