228

スクリプトから現在のディレクトリを変更することは可能ですか?

Bash でディレクトリ ナビゲーション用のユーティリティを作成したいと考えています。次のようなテスト スクリプトを作成しました。

#!/bin/bash
cd /home/artemb

Bash シェルからスクリプトを実行すると、現在のディレクトリは変更されません。スクリプトから現在のシェル ディレクトリを変更することはまったく可能ですか?

4

17 に答える 17

255

スクリプトを開始すると、環境のみを継承する新しいプロセスが作成されます。終わる時は終わる。現在の環境はそのままです。

代わりに、次のようにスクリプトを開始できます。

. myscript.sh

.現在の環境でスクリプトを評価するため、変更される可能性があります

于 2009-05-17T12:02:35.990 に答える
198

スクリプトをシェル関数に変換する必要があります。

#!/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」は、シェル インタープリターに組み込まれているため、シェル プロセスに影響を与えます。

プログラムをシェル関数にすることで、独自のインプロセス コマンドを追加し、ディレクトリの変更がシェル プロセスに反映されます。

于 2009-05-17T12:46:45.477 に答える
61

回答の読みやすさと複雑さを考慮して、これが要求者がすべきことだと思います

  1. そのスクリプトをPATH
  2. としてスクリプトを実行します. scriptname

(.ドット) は、スクリプトが子シェルで実行されないようにします。

于 2009-09-01T20:37:27.390 に答える
43

上記をまとめると、エイリアスを作成できます

alias your_cmd=". your_cmd"

先頭の「.」を書きたくない場合 スクリプトをシェル環境にソースするたびに、または単に覚えたくない場合は、スクリプトが正しく機能するためにこれを行う必要があります。

于 2010-08-16T08:09:32.190 に答える
35

bash を使用している場合は、エイリアスを試すことができます。

.bashrc ファイルに次の行を追加します。

alias p='cd /home/serdar/my_new_folder/path/'

コマンドラインで「p」と書くと、ディレクトリが変更されます。

于 2010-05-11T12:25:23.273 に答える
22

bash スクリプトを実行すると、現在の環境またはその子の環境で動作し、親では動作しません。

目標がコマンドを実行することである場合: goto.sh /home/test 次に、/home/test でインタラクティブに作業する 1 つの方法は、スクリプト内で bash インタラクティブ サブシェルを実行することです。

#!/bin/bash
cd $1
exec bash

このようにして、このシェルを終了 ( exit または Ctrl+C ) するまで /home/test にいます。

于 2013-03-01T19:56:30.990 に答える
19

pushd を使用すると、現在のディレクトリがディレクトリ スタックにプッシュされ、指定されたディレクトリに変更されます

pushd ../new/dir > /dev/null
# do something in ../new/dir
popd > /dev/null
于 2009-05-17T12:18:26.480 に答える
5

に行くだけです

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を使用できるようになりました

于 2015-10-28T05:14:13.197 に答える