执行以下脚本会给 mkdir 命令
带来错误PATH=/root
while getopts "r" name;
do
case $name in
r)
PATH=/home
;;
*)
echo "Usage: $0 -r"
;;
esac
done
echo $PATH
mkdir new
错误:
./test.sh: line 15: mkdir: command not found
这个剧本有什么问题?
答案 0 :(得分:3)
您的问题与getopts
没有任何关系。
问题是第一行:
PATH=/root
或者,如果它被执行,这一行:
PATH=/home
这会将命令的搜索路径设置为 /root
或/home
目录。 (通常这些目录都不包含任何命令)。
设置$PATH
会丢弃先前的值。 mkdir
可能在/bin
,但由于/bin
已不在$PATH
,因此shell无法找到它。
您不会在getopts
命令上收到错误,因为它已内置到您正在使用的shell中。
如果您想将/root
添加到$PATH
,请使用:
PATH="/root:$PATH"
或
PATH="$PATH:/root"
但是,您的脚本中的任何内容似乎都不依赖于/root
中的$PATH
。你为什么一开始就做PATH=/root
?如果您尝试将当前工作目录设置为/root
或/home
,则需要chdir
命令。