特定のディレクトリの場所を計算するcliを作成しました。スクリプトを変更したいと思っています。私の最初のアプローチは./myscript | cd
でした。私は学んだことが1として動作しません。cd
はパイプ引数を取らず、2.スクリプトは親シェルのディレクトリを変更することができません。私のシェル関数がパイプ入力からディレクトリを変更できないのはなぜですか?
私は回避策があることを学んだ、と私は.bash_profile
で関数を作成してみました:今./myscript | cdir
正しいディレクトリを実行している
function cdir(){
DIR=""
while read LINE; do
DIR=$LINE
done
echo $DIR
cd $DIR
}
が出力され、しかし、ディレクトリがまだ変更されません。
コマンド置換を使用して作業します。cd $(./myscript)
ですが、実際にはパイプを使用してこれを書き込むことができます。どのように私はこれを動作させることができるか、または少なくともそれが不可能である理由を説明することができますか?
あなたが関数の最後に 'pwd'はを実行する場合は、ことがわかりますディレクトリ*はスコープ内で変更されました。そのスコープがPOSIXで指定されていないパイプラインの親スコープと一致するかどうか、そしてシェルとシェルの違い(特定のシェルのさまざまな実行時設定間で変化するかどうか - 最後のパイプライン要素を新しいバージョンのbashジョブ制御サポートを無効にした場合のみ)。 –