2011-10-20 9 views
0

bashファイルを使ってlinuxのディレクトリを変更したいと思います。以下は、使用されたコードスニペットです。bashを使ってディレクトリ 'cd'を変更する

#!/bin/bash 
alias proj="cd /home/prag/Downloads" 

しかし、bashファイルを実行すると、応答がない、つまり同じディレクトリにとどまります。なぜそうなの?エイリアスがここで動作しないのはなぜですか?または別の何かをする必要がありますか?

答えて

4

現在の作業ディレクトリの変更はスクリプト内にとどまるため、bashファイルを実行することはできません(コマンドプロンプトを表示するプロセスとは別のプロセス - bash)。

〜/ .bash_aliasesファイルまたは〜/ .bashrcファイルにエイリアスを追加します(前者が望ましい場合は後者が優先され、前者が存在しない場合は後者が速くなる可能性があります)。

+0

これをクリアしていただきありがとうございます。あなたはエイリアスをbashの新機能として書いてくれますか? – SyncMaster

+0

あなたはすでにそれを書いています。 'alias proj = "cd/home/prag/Downloads"'を.bash_aliasesファイルまたは.bashrcファイルにコピーするだけです。それを保存して、ターミナルを閉じてからもう一度開くと、コマンドが機能するはずです。 –

+0

@pragadheesh:これがあなたの質問に答えたなら、それを答えにすることができますか?ありがとう。ありがとう。 –

2

各プロセスにはそれぞれ独自のカレントディレクトリがあります。 bashスクリプトを起動してカレントディレクトリを変更しても存在する場合、これは親プロセス(つまり、スクリプトを起動するシェル)には影響しません。

./script.shの代わりに、source ./script.sh(または. ./script.sh)を試してください。

また、cdaliasを定義すると、ディレクトリ自体は変更されません。私はあなたが実際にエイリアスをどこかで呼び出すと仮定します。

0

別のディレクトリにcdするbashスクリプトを書いてもいいですか?

なぜエイリアスを使用するのですか?ちょうど "cd"コマンドを使用してください!

+0

スピード。あなたがそのディレクトリに多く入っているなら、それをエイリアスするのは理にかなっています。私は小さなプログラムとbash_aliasesを使って、端末のブックマークを保存できるようにしています。私は単純に 'pj foo'と入力すると、その名前に対応するディレクトリに移動します。 –

0

./cd.shのように呼び出すと、新しいシェルプロセスでスクリプトが実行されるためです。 あなたのスクリプトはそのサブシェルのディレクトリを変更し、スクリプトが終了すると制御が以前のシェルに戻ります。

. cd.shのようなスクリプトを呼び出すことができます。これは、現在のシェルでスクリプトを実行し、cdコマンドが機能します。

関連する問題