2

bashのエイリアスについて学びました。私は次のように作成しました:

alias="cd $directory"

どこ$directoryで使用入力からです。別のシェル スクリプトでは、次のようにサブシェルを起動できます。

( bash )

これにより、サブシェルが表示されます。ここで を実行するcdと、エイリアス に移動しcd $directoryます。これは素晴らしいことであり、期待どおりに機能しているようです。

私が探しているのは、サブシェルが起動されたとき、cd が自動的に発生するためです。

( bash | cd )

サブシェルを起動し、ユーザーが入力した場所にcdすると考えていますが、機能し$directoryていません。これを機能させるにはどうすればよいですか?私も( bash -c cd)無駄に努力しました。

ありがとう。

4

1 に答える 1

3

( bash | cd )が機能しない理由は、パイプライン内の各コマンドが個別のサブシェルで実行されるため( bash | cd )、本質的に同等です( ( bash ) | ( cd ) )(もちろん、後者はさらに多くのサブシェルを起動することを除いて)。代わりに、次のように記述できるはずです。

( cd ; bash )

(これは を実行cd する前に実行されますbash)bashは、起動元のサブシェルの実行環境のコピーを継承するためです。

ところで、cdこの方法でエイリアスを作成してもよろしいですか? それはエラーが発生しやすく、私には混乱しているようです。cdユーザー指定のディレクトリに s するシェル関数を作成する方がよいと思います。

function cd_user () { cd "$directory" ; }

( cd_user ; bash )
于 2012-03-20T02:31:29.107 に答える