ディレクトリを変更してからファイルを検索するスクリプトを作成しました。
#!/bin/bash
model_dir=/mypath
function chdir () {
cd $1
}
chdir ${model_dir}/config
if [[ ! -s *.cfg ]]
then
echo `date` "configure file does not exist"
exit 1
fi
source myscript.sh
.
答え1
スクリプト(特に内部cd
コマンド)は、または同等の機能を使用して呼び出すと正しく機能します。bash
source
.
主な問題は、@adonisがすでにコメントで指摘したように、「*.cfg」というファイルが実際に存在しない限り、ディレクトリを正しく変更した後にシェルが終了することです。これは非常に疑わしいです。
*.cfgをパターンとして使用したいようです。期待通りに動作するようにスクリプトを少し変更する方法は次のとおりです。
#!/bin/bash # Note that the shebang is useless for a sourced script
model_dir=/mypath
chdir() { # use either function or (), both is a non portable syntax
cd $1
}
chdir ${model_dir}/config
if [ ! -s *.cfg ]; then # Single brackets here for the shell to expand *.cfg
echo $(date) "configure file does not exist"
exit 1 # dubious in a sourced script, it will end the main and only shell interpreter
fi
答え2
cd
これは、シェル環境ではなくスクリプト内でコマンドが実行されるためです。現在のシェル環境でスクリプトを実行するには、次のように実行します。
. /path/to/script.sh
pwd
あなたのステートメントが置き換えられた私のスクリプトの実際の例の出力if
:
Jamey@CNU326BXDX ~
$ /usr/local/bin/this.sh
/cygdrive/c/users/jamey/downloads
Jamey@CNU326BXDX ~
$ . /usr/local/bin/this.sh
/cygdrive/c/users/jamey/downloads
Jamey@CNU326BXDX /cygdrive/c/users/jamey/downloads
$
スクリプトを2回実行した後、現在の作業ディレクトリをメモします。