重複の可能性:
スクリプトを使用して現在の作業ディレクトリを変更する
メインシェル/ターミナルの作業ディレクトリを変更するスクリプトをいくつか作成しようとしています。そうすることができません。私は以下を試しました
#!/bin/bash
cd /home/mtk/work/project1
#!/bin/bash
cd /home/mtk/templates/resusable/sampleCodes
しかし、上記はそれ自体、つまり現在実行されているものに対してのみ変更されることを認識しています。これはp1.sh
またはcode.sh
この場合。
Shellを呼び出す親の現在の作業ディレクトリを変更するにはどうすればよいか教えてください。
$ pwd
/home/mtk
$ p1.sh
$ pwd
/home/mtk ### --> Expected /home/mtk/work/project1
私の使用例は次のとおりです。処理を実行してから、プロンプトを事前定義されたディレクトリに配置します。
なぜうまくいかないのかわかります。そして、alias
はそのような場合の解決策のようです。しかし、私は拡大したいと思います、私の質問:
親シェルの作業ディレクトリを動的に変更するスクリプトを作成する必要があります。スクリプトは次のようになりますmycd.sh
。コマンドライン引数はmycd.sh -c/-p1/-p2/
またはその他のユーザー定義の引数。
与える-c
は、シェルの作業ディレクトリをそれぞれのディレクトリに切り替えます。ファイルmycd.sh
は次のようになります
.. some processing
# parameter parsing
if [ $param1 -eq "c" ]; then
# change working dir of parent here
else
... other conditions
シェルの作業ディレクトリを変更する方法があるはずです。
不明な点がありましたらお知らせください。
これには エイリアス を使用します。例:.
alias p1='cd /home/mtk/work/project1'
alias code='cd /home/mtk/templates/resusable/sampleCodes'
これらの行をシェルの起動スクリプトに配置する必要があります。 ~/.bashrc
。
別のオプションは、 シェル関数 を使用することです。これはもう少し複雑です。シェル関数にはエイリアスに比べていくつかの利点がありますが、この場合、これらの追加機能は必要ありません。
function p1 { cd /home/mtk/work/project1; }
function code { cd /home/mtk/templates/resusable/sampleCodes; }
実行中のシェルから呼び出し元のシェルを変更することはできません
他のアプリ(例:dircolors
)が呼び出し元のシェルを操作するために従うように見えるこれを行う通常の方法は、スクリプトに(実行するのではなく)cd
(またはこれまで)コマンドをエコーさせることです。 )次に、呼び出し元のシェルに呼び出しをeval
でラップするように要求します
スクリプトで呼び出し元のシェルを設定する以上のことを行おうとしていて、呼び出し元が実際に何をしているのかを知っていることに依存しているため、これはあなたの場合には機能しない可能性があります。
例えば.
#!/bin/bash
#somescript.sh
echo cd /some/path
次に
eval `./somescript.sh`
また、セキュリティのためにやや眉をひそめています; o)