シェル スクリプト (bash) で「ディレクトリの変更」を使用しました
#!/bin/bash
alias mycd='cd some_place'
mycd
pwd
pwd
正しく印刷some_place
されますが、スクリプトが終了した後、現在の作業ディレクトリは変更されません。
スクリプトでパスを変更することはできますか?
ファイルを次のようにソースする必要があります。
. myfile.sh
また
source myfile.sh
ソースを指定しないと、スクリプトを呼び出している親シェルではなく、サブシェルで変更が行われます。ただし、ファイルをソースすると、ファイル内の行は、コマンド ラインで入力されたかのように実行されます。
スクリプトは別のサブシェルで実行されます。そのサブシェルは、実行するシェルではなく、ディレクトリを変更します。考えられる解決策はsource
、実行する代わりにスクリプトを使用することです。
# Bash
source yourscript.sh
# or POSIX sh
. yourscript.sh
実行したいスクリプトを取得することは 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 ) で使用され 、学習シェル ディレクトリのブックマークを提供します。
調達することで実現できます。ソースは基本的に同じシェルでスクリプトを実行しますが、通常の実行(sh test.sh
または./test.sh
)はサブシェルを作成し、そこでスクリプトを実行します。
test.sh
cd development/
ls
# Do whatever you want.
test.sh
によって実行
source test.sh
.
は最短表記の為source
、したがって、次の方法でも実行できます
. test.sh
これにより、スクリプトが実行され、現在のシェルのディレクトリが に変更されdevelopment/
ます。