シェル(学校プロジェクト)に取り組んでいます。私たちは行動を理解していません。 リダイレクト時に組み込み関数が動作しないのはなぜですか?シェル組み込みリダイレクト
cd - | command
よう
は、ディレクトリを変更しません。
または
export NAME=VALUE | command
は、変数を作成しません。
ありがとうございます。
シェル(学校プロジェクト)に取り組んでいます。私たちは行動を理解していません。 リダイレクト時に組み込み関数が動作しないのはなぜですか?シェル組み込みリダイレクト
cd - | command
よう
は、ディレクトリを変更しません。
または
export NAME=VALUE | command
は、変数を作成しません。
ありがとうございます。
パイプラインのリンクは、分岐したサブシェルで実行されます。 bashで
、あなたは$ BASHPIDと、現在のプロセスのPIDを印刷することができ、そのような何か:真ん中の2つのPIDがあることで
12849
12851
12852
12849
:
self(){ echo $BASHPID; } ; self ; self >&2 | self; self
はあなたのような何かを与える必要があります最初と最後のもの(マザー・シェル)とは異なります(いくつかのシェルでは、最初または最後のリンクはマザー・シェルで実行されますが、bashでは実行されません)。
サブシェルで現在のディレクトリを変更したり、値をエクスポートしても、親シェルには何ら影響しません。
あなたは混乱していると思います。 '|'セミコロンで ';'ツールチェーンを構築するときパイプはあるコマンドのstdoutを別のコマンドのstdoutに渡すためのものです。 セミコロンは、同じシェルで別のコマンドを実行するためのものです。
したがってその内容をいくつかのディレクトリを入力してリストアップするために、あなたはこれを行う必要があります:パイプラインのすべてのプロセスが適切にその流れで、サブシェルで同時に開始されている通常のLinuxに
cd somedir; ls
スケジューラは、マシン上で実行されている他のすべてのプロセスとともに、接続され、管理されます。それらの出力はバッファを介して再接続され、同期されます
その理由は、変数が子供のサブシェルにとどまっていたためにexport
コマンドの変更が表示されないためです。
ご理解いただきありがとうございます。 chdirは呼び出し元のプロセスに対してのみ機能します。 –