【发布时间】:2018-04-06 14:39:05
【问题描述】:
背景
我正在使用 Digital Ocean API 创建一个新服务器(droplet),并包含一个 bash 脚本,以便在服务器第一次启动时自动运行。
问题
在我的 bash 脚本(以 root 身份运行)中,我尝试通过其 shell script 安装 Oh-My-Zsh,它尝试将其安装在 ~ 中。但是,当我 ssh 进入机器时,我发现 Oh-My-Zsh 已安装到 /~/ 而不是 /root。
问题
什么可能导致 bash 将 ~ 解释为文件夹的名称,而不是 $HOME 的别名,我可以做些什么来解决这个问题? 哦,我的Zsh 安装脚本不归我所有,所以我不能简单地将每个 ~ 更改为 $HOME 或 /root (当然我可以组合一个 sed 命令在该安装脚本中为我做替换,但是看来应该有更简单的方法...)
【问题讨论】:
-
向我们展示上下文。如果
~在扩展的变量中是字面的,那可以这样做,但我们需要查看导致该错误权威性的特定代码实例,作为问题的一部分包含. -
另外,
HOME是否被定义也很重要。 (而且,err,你说你正在运行一个带有 bash 的 oh-my-zsh 安装脚本,而不是 zsh?有非常不同且不相互兼容的 shell) -
...示例:
var="~/foo"; mkdir -p "$var"会导致问题,但这只是许多可能的机制之一。没有显示您个人失败案例的具体代码,这个问题只是一个猜测。 -
嘿@CharlesDuffy,感谢您的评论!看起来我盲目地假设
$HOME会被定义,但事实并非如此。一旦我手动定义它,一切都按预期工作。非常感谢您的帮助!
标签: bash unix directory sh digital-ocean