81

シェル スクリプト (bash) で「ディレクトリの変更」を使用しました

#!/bin/bash
alias mycd='cd some_place'
mycd
pwd

pwd正しく印刷some_placeされますが、スクリプトが終了した後、現在の作業ディレクトリは変更されません。

スクリプトでパスを変更することはできますか?

4

6 に答える 6

90

ファイルを次のようにソースする必要があります。

. myfile.sh

また

source myfile.sh

ソースを指定しないと、スクリプトを呼び出している親シェルではなく、サブシェルで変更が行われます。ただし、ファイルをソースすると、ファイル内の行は、コマンド ラインで入力されたかのように実行されます。

于 2010-10-07T07:17:50.683 に答える
17

スクリプトは別のサブシェルで実行されます。そのサブシェルは、実行するシェルではなく、ディレクトリを変更します。考えられる解決策はsource、実行する代わりにスクリプトを使用することです。

# Bash
source yourscript.sh
# or POSIX sh
. yourscript.sh
于 2010-10-07T07:17:13.943 に答える
17

実行したいスクリプトを取得することは 1 つの解決策ですが、このスクリプトは現在のシェルの環境を直接変更できることに注意してください。また、引数を渡すこともできなくなりました。

もう 1 つの方法は、スクリプトを bash の関数として実装することです。

function cdbm() {
    cd whereever_you_want_to_go
     echo arguments to the functions were $1, $2, ...
}

この手法は autojump ( http://github.com/joelthelion/autojump/wiki ) で使用され 、学習シェル ディレクトリのブックマークを提供します。

于 2010-10-07T08:50:43.427 に答える
4

調達することで実現できます。ソースは基本的に同じシェルでスクリプトを実行しますが、通常の実行(sh test.shまたは./test.sh)はサブシェルを作成し、そこでスクリプトを実行します。

test.sh

cd development/
ls
# Do whatever you want.

test.shによって実行

source test.sh

.は最短表記の為source、したがって、次の方法でも実行できます

. test.sh

これにより、スクリプトが実行され、現在のシェルのディレクトリが に変更されdevelopment/ます。

于 2014-04-15T18:43:04.670 に答える