スクリプトから現在のディレクトリを変更することは可能ですか?
Bash でディレクトリ ナビゲーション用のユーティリティを作成したいと考えています。次のようなテスト スクリプトを作成しました。
#!/bin/bash
cd /home/artemb
Bash シェルからスクリプトを実行すると、現在のディレクトリは変更されません。スクリプトから現在のシェル ディレクトリを変更することはまったく可能ですか?
スクリプトから現在のディレクトリを変更することは可能ですか?
Bash でディレクトリ ナビゲーション用のユーティリティを作成したいと考えています。次のようなテスト スクリプトを作成しました。
#!/bin/bash
cd /home/artemb
Bash シェルからスクリプトを実行すると、現在のディレクトリは変更されません。スクリプトから現在のシェル ディレクトリを変更することはまったく可能ですか?
スクリプトを開始すると、環境のみを継承する新しいプロセスが作成されます。終わる時は終わる。現在の環境はそのままです。
代わりに、次のようにスクリプトを開始できます。
. myscript.sh
は.
現在の環境でスクリプトを評価するため、変更される可能性があります
スクリプトをシェル関数に変換する必要があります。
#!/bin/bash
#
# this script should not be run directly,
# instead you need to source it from your .bashrc,
# by adding this line:
# . ~/bin/myprog.sh
#
function myprog() {
A=$1
B=$2
echo "aaa ${A} bbb ${B} ccc"
cd /proc
}
その理由は、各プロセスには独自の現在のディレクトリがあり、シェルからプログラムを実行すると、新しいプロセスで実行されるためです。標準の「cd」、「pushd」、および「popd」は、シェル インタープリターに組み込まれているため、シェル プロセスに影響を与えます。
プログラムをシェル関数にすることで、独自のインプロセス コマンドを追加し、ディレクトリの変更がシェル プロセスに反映されます。
回答の読みやすさと複雑さを考慮して、これが要求者がすべきことだと思います
PATH
. scriptname
(.
ドット) は、スクリプトが子シェルで実行されないようにします。
上記をまとめると、エイリアスを作成できます
alias your_cmd=". your_cmd"
先頭の「.」を書きたくない場合 スクリプトをシェル環境にソースするたびに、または単に覚えたくない場合は、スクリプトが正しく機能するためにこれを行う必要があります。
bash を使用している場合は、エイリアスを試すことができます。
.bashrc ファイルに次の行を追加します。
alias p='cd /home/serdar/my_new_folder/path/'
コマンドラインで「p」と書くと、ディレクトリが変更されます。
bash スクリプトを実行すると、現在の環境またはその子の環境で動作し、親では動作しません。
目標がコマンドを実行することである場合: goto.sh /home/test 次に、/home/test でインタラクティブに作業する 1 つの方法は、スクリプト内で bash インタラクティブ サブシェルを実行することです。
#!/bin/bash
cd $1
exec bash
このようにして、このシェルを終了 ( exit または Ctrl+C ) するまで /home/test にいます。
pushd を使用すると、現在のディレクトリがディレクトリ スタックにプッシュされ、指定されたディレクトリに変更されます。
pushd ../new/dir > /dev/null
# do something in ../new/dir
popd > /dev/null
に行くだけです
yourusername/.bashrc (or yourusername/.bash_profile on MAC) by an editor
最後の行の横に次のコードを追加します。
alias yourcommand="cd /the_path_you_wish"
次に、エディターを終了します。
次に、次のように入力します。
source ~/.bashrc or source ~/.bash_profile on MAC.
ターミナルでyourcommandを使用できるようになりました