我知道,采购脚本和执行脚本的唯一区别是在后一种情况下,父环境不受影响。
考虑这个示例脚本:
SETUP_DIR=`dirname $0`
echo $SETUP_DIR
echo $0
echo $1
上面的脚本只是获取正在运行的脚本的目录名。在尝试获取它时,上述脚本失败并出现以下错误
$ . test.sh foo
dirname: invalid option -- k
Try `dirname --help' for more information.
-ksh
foo
在我看来的原因是,在采购它时,当脚本在父环境 shell 中运行时,shell 名称作为第一个参数传递,在这种情况下它的-ksh
.
并且dirname -ksh
因为 而失败-k
,这是一个无效的选项dirname
奇怪的是,在 sh 或 bash 中运行时不存在这个问题
$ sh
sh-3.2$ . test.sh foo
.
sh
foo
sh-3.2$ bash
bash-3.2$ . test.sh foo
.
bash
foo
bash-3.2$
- 所以我想知道,这是 KornShell (ksh) 中已知的记录行为吗?如何解决这个问题?
- 我的第二个通用问题是,为什么
dirname 'sh'
返回当前目录.