2012-03-20 11 views
2

bashのエイリアスについて知りました。 $directoryが使用入力からである'cd'コマンドのエイリアスとサブシェルが期待通りに動作しない

alias="cd $directory"

:私はそうのようなものを作成しました。私はcdを実行する場合、私は別名に行き、サブシェル、cd $directoryに私をもたらします

(bash)

:別のシェルスクリプトでは、私はそうのようなサブシェルを起動することができます。これは素晴らしいことであり、期待どおりに動作しているようです。サブシェルが起動したときのためである私は何を探している

は、CDは自動的に行われますので、私が試した:

(bash | cd)

それは、ユーザーが入力した$directoryにサブシェルやCDを発売する考えしかし、それは動作していません。これを動作させるにはどうすればいいですか?私も(bash -c cd)を試してみました。

ありがとうございました。

+0

これはSOのためにオフトピックです:私はそれをユーザーが指定したディレクトリにcd秒というシェル関数を作成する方がよいと思います。プログラミングとは何の関係もなく、オペレーティングシステムに関する質問です。したがって、代わりに[スーパーユーザー](http://superuser.com)で尋ねる必要があります。 SOは、関連する質問と回答をプログラミングするためのものです。ここでどのような質問が適切かどうかについては、[FAQ](http://stackoverflow.com/faq)をご覧ください。ありがとう。 :) –

+0

本当に?私はbashスクリプトはプログラミングと見なされると思っていました...他にも多くのbash関連の質問があります。 – nicorellius

+0

Bashスクリプトはそうです。エイリアスはスクリプティングではなく、基本的なbash操作です。 (bashスクリプトで何かを行う方法を尋ねるのはトピックです; bashシェルでディレクトリやリストファイルを変更する方法はありませんか?この質問は後者のカテゴリIMOにあります) –

答えて

3

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

(cd ; bash) 

をそれから打ち上げられたサブシェルの実行環境のコピーを継承するbashので、(cdbashを実行している実行しています)。

ところで— cdをこのようにエイリアスとして作成してもよろしいですか?それはエラーが起こりやすく、私に混乱するようです。

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

(cd_user ; bash) 
+0

ええ、そうです。私はこのようにエイリアスとして 'cd'を作成したくありません。私は例として使っています。私は 'cd_udir'のようなことをします(あなたが指摘したように)。あなたの答えは、あまりにも参考になります。ありがとうございました。それを今試みている。 – nicorellius

+0

あなたの答えは私の問題を解決しました。ありがとう。しかし、私はあなたの他の推薦を取って​​それを試して、それは動作しませんでした。私のコードを見て、私にその機能を教えてもらえますか?私は、サブシェルがスクリプト内の別の関数で呼び出されているので、エラーが出ているはずです: 'mmf.sh:line 79:cd_udir:command not found' – nicorellius

+0

@nicorellius:あなたがすべきではない理由はありませんある機能を別の機能から呼び出すことができます。 :/ – ruakh

関連する問題