【问题标题】:What would cause bash to interpret ~ as a directory literally named "~"?什么会导致 bash 将 ~ 解释为字面上名为“~”的目录?
【发布时间】: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


【解决方案1】:

这可以通过多种方式发生。拿几个:

【讨论】:

    猜你喜欢
    • 2013-01-12
    • 2021-12-23
    • 1970-01-01
    • 2012-07-14
    • 2015-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-02
    相关资源
    最近更新 更多