我编写了一个脚本来更改目录,然后扫描文件。
#!/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 评论中已经指出的那样,您的 shell 在正确更改其目录后将退出,除非确实存在名为“*.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
命令是在脚本内部执行的,而不是在当前的 shell 环境中执行的。如果您希望脚本在当前的 shell 环境中运行,请像这样运行:
. /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
$
请注意脚本第二次运行后的当前工作目录。