端末を開き、bash関数を呼び出します。
change_path
どこ:
change_path(){
export PATH="foobar:$PATH";
}
change_path
常に現在のシェルで実行され、常に現在のシェルの$ PATHを変更しますか?今までのテストではそうなのですが、確かにわかりにくいです。
答え1
はい、呼び出された関数は現在シェルで実行されています。
現在、シェルから関数をインポートした(定義した)とします。これは、いくつかのファイル(〜/ .bashrcなど)をインポートするか、現在のシェルに手動で関数を作成することによって実行できます。次のコマンドを実行して、この前提を確認できます。
$ type -a change_path
関数定義を印刷すると、関数は現在のシェルで定義されており、変更可能な現在のシェル変数にアクセスできます。
(...)
これは、変数が適切に制限されている場合(たとえば、代わりに次のものを使用する場合)、関数が常に変数を変更するという意味ではありません{...}
。
$ change_path()(
export PATH="foobar:$PATH";
)
しかし、関数は実際には現在のシェルで実行され続けており、単にサブシェルを起動します。(...)
これを確認するには、bashのマニュアルを読んでください(強調表示):
機能
上記のSHELL GRAMMARで説明されているように定義されたシェル関数は、後で実行するための一連のコマンドを保存します。シェル関数の名前を単純なコマンド名として使用すると、その関数名に関連付けられたコマンドのリストが実行されます。関数は現在のシェルのコンテキストで実行されます。;これを解釈するための新しいプロセスは作成されません(シェルスクリプトの実行と比較)。