是什么导致bash将~解释为一个按字面命名的目录~&引用;? 出身背景
我正在使用Digital Ocean API创建一个新服务器(droplet),并包含一个bash脚本,当服务器第一次启动时自动运行 问题 在我的bash脚本(以root运行)中,我尝试通过its安装ohmyzsh,它尝试在是什么导致bash将~解释为一个按字面命名的目录~&引用;? 出身背景,bash,unix,directory,sh,digital-ocean,Bash,Unix,Directory,Sh,Digital Ocean,我正在使用Digital Ocean API创建一个新服务器(droplet),并包含一个bash脚本,当服务器第一次启动时自动运行 问题 在我的bash脚本(以root运行)中,我尝试通过its安装ohmyzsh,它尝试在~中安装它。但是,当我使用ssh连接到机器中时,我发现Oh My Zsh已安装到/~/而不是/root 问题 是什么原因导致bash将~解释为文件夹的名称而不是$HOME的别名,我能做些什么来解决这个问题吗?Oh My Zsh安装脚本不属于我,所以我不能简单地将每个~更改为$
~
中安装它。但是,当我使用ssh连接到机器中时,我发现Oh My Zsh已安装到/~/
而不是/root
问题
是什么原因导致bash将
~
解释为文件夹的名称而不是$HOME
的别名,我能做些什么来解决这个问题吗?Oh My Zsh安装脚本不属于我,所以我不能简单地将每个~
更改为$HOME
或/root
(当然,我可以拼凑一个sed命令来替换安装脚本中的内容,但似乎应该有一个更简单的方法……)这可以通过几种方式实现。采取以下措施:
- -如果tilde是变量中的文字内容,则tilde扩展将不会在变量扩展时进行
- -如果通过其他扩展(即,
)创建波浪形表达式,则需要使用其他方法对其进行扩展~$user
- 如果未定义
,则不会进行波浪线扩展$HOME
~
在展开的变量中是文本,那么就可以了,但我们需要查看导致错误以权威方式出现的特定代码实例,这是问题的一部分。此外,是否定义了HOME
,也很重要。(而且,呃,你说你在用bash运行一个oh my zsh安装脚本,而不是zsh?有很多不同的shell,它们之间并不兼容)…例如:var=“~/foo”;mkdir-p”$var”
会导致问题,但这只是许多可能机制中的一种。在不显示个别故障案例的具体代码的情况下,此问题只是一个推测。(可能重复,此问题应加以区分:;)嘿@CharlesDuffy,谢谢你的评论!看起来我盲目地假设$HOME
会被定义,但事实并非如此。一旦我手动定义了它,一切都按预期进行了。非常感谢你的帮助!