任何命令行的选项在命令运行之前都会被扩展,即使是内部命令也是如此。无论您使用什么 shell 来运行/bin/bash cd ~
,都可能是按字面意思解释波浪号,而不是扩展到您的主目录的特殊字符。
作为测试,尝试使用该名称创建一个目录,看看错误是否消失。
> mkdir ./~
> /bin/bash cd ~
请注意,该cd
命令需要在您正在运行的 shell中完成才能有用。当您更改子 shell 的工作目录,然后子 shell 退出时,您会发现自己回到了开始的位置。
更新:
在 bash 脚本中,您应该能够使用$HOME
环境变量,它应该始终包含您的主目录。我不知道什么条件会导致波浪号扩展失败,但我一直使用$HOME
.
此外,在确定是否可以更改为特定目录时,您可以选择显式并返回有用状态:
unset err
if [[ ! -d "$somedir" ]]; then
err="Can't find $somedir"
elif [[ ! -r "$somedir" ]]; then
err="Can't read $somedir"
fi
if [[ -n "$err" ]]; then
echo "$ERROR: $err" >&2
exit 1
fi
cd "$somedir"
或者,您可以尝试 CD 并查看其结果。
if ! cd "$somedir"; then
echo "ERROR: $somedir not availble"
exit 1
fi
详细的错误报告很方便,但如果您不需要它们,保持代码小也有好处。