【发布时间】:2017-03-17 00:33:05
【问题描述】:
我最近了解到 ~ 指的是 HOME 变量。因此,如果我设置 HOME=/foo 然后尝试使用想要 cd ~/Documents 的 bash 脚本,它最终会说:
foo/Documents: 没有这样的文件或目录
在这种情况下,最佳做法是什么?崩溃并向用户抱怨他们覆盖了 HOME?或者有什么办法可以恢复HOME的默认值?
【问题讨论】:
-
这取决于上下文。对于许多工具,环境变量构成界面的一部分(例如
LC_*和语言环境),您希望允许用户显式设置它们。在其他情况下,例如sudo,您希望清除环境以防止发生意外情况。你在用你的脚本做什么? -
如果他们更改
HOME,这意味着他们希望应用程序将该目录视为他们的主目录。推翻他们的意愿不是你的责任。 -
另一个恢复选项是使用
$USER在标准位置测试/home/$USER,如果您确实想恢复$HOME,可以使用它。现在明白了,这些都不能在脚本中完成并影响 shell。您可以更改脚本运行的进程的环境,但不能更改父进程的环境。因此,如果用户在脚本中更改了$HOME,请使用@Barmar 的评论。 -
@DavidC.Rankin:不能保证主目录实际上位于
/home下。虽然相对较少的系统仍将其置于/usr/之下,但它们仍在使用中。 -
@DavidC.Rankin 这是特定于操作系统的,在 OS X 上是
/Users/$USER。
标签: bash unix tilde-expansion