重複の可能性:
スクリプトを使用して現在の作業ディレクトリを変更する
メインシェル/ターミナルの作業ディレクトリを変更するスクリプトを作成しようとしています。そうすることはできません。私は次を試しました
ファイルp1.sh
#!/bin/bash
cd /home/mtk/work/project1
ファイルコード.sh
#!/bin/bash
cd /home/mtk/templates/resusable/sampleCodes
しかし、上記の内容は、現在実行中の独自にのみ変更されることがわかります。この場合、p1.sh
OR code.sh
。
親呼び出しシェルの現在の作業ディレクトリを変更する方法を教えてください。
実行例と期待事項:
$ pwd
/home/mtk
$ p1.sh
$ pwd
/home/mtk ### --> Expected /home/mtk/work/project1
ノート
私のユースケースは次のとおりです。いくつかの処理を実行した後、プロンプトを事前定義されたディレクトリに配置したいと思います。
編集する
なぜ動作しないのかを知っています。このalias
状況に対する解決策のようです。しかし、私の質問を拡張したいと思います。
親シェルの作業ディレクトリを動的に変更するスクリプトを作成する必要があります。スクリプトは次のように言いますmycd.sh
。これには、コマンドラインパラメータmycd.sh -c/-p1/-p2/
またはその他のカスタムパラメータがあります。
Give は-c
シェル作業ディレクトリを適切なディレクトリに切り替えます。ファイルはmycd.sh
次のとおりです
.. some processing
# parameter parsing
if [ $param1 -eq "c" ]; then
# change working dir of parent here
else
... other conditions
私はシェル作業ディレクトリを変更する方法があると思いました。
不明な点があれば教えてください。
答え1
使用ニックネームこの目的のために、例えば
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; }
答え2
実行シェルで呼び出しシェルを変更することはできません。
dircolors
たとえば、他のアプリケーションは、スクリプトをcd
実行するのではなく、コマンドをエコー(または何でも)させ、呼び出しシェルに呼び出しをラップするように要求する一般的なシェル呼び出し方法に従うようです。eval
スクリプトで呼び出しシェルを設定するよりも多くのことを試み、実際に何をするのかを知っている呼び出し元に依存するため、これはおそらくあなたの場合は機能しません。
例えば
#!/bin/bash
#somescript.sh
echo cd /some/path
それから
eval `./somescript.sh`
また、セキュリティ上の理由で少し目をつぶします。 ;o)