我正在尝试从命令行添加YUM repo,如此
cat > /etc/yum.repos.d/my_stable_repo.repo << EOF
[my_stable_repo]
name=Stable Repo
baseurl='https://myurl/$releasever/stable/Packages/'
enabled=1
gpgcheck=0
EOF
但是,当我这样做时,我会看一下/etc/yum.repos.d/my_stable_repo.repo
,我在网址中看不到$releasever
。相反,/etc/yum.repos.d/my_stable_repo.repo
看起来像:
[my_stable_repo]
name=Stable Repo
baseurl='https://myurl//stable/Packages/'
enabled=1
gpgcheck=0
请注意,releasever变量已被删除。我假设这是因为当我运行命令将内容从shell写入文件时,linux正在针对全局环境评估$releasever
变量,看到它是空的,并用空字符串替换它。
但我实际上只希望字符串$releasever
位于/etc/yum.repos.d/my_stable_repo.repo
。所以文件应该如下所示:
[my_stable_repo]
name=Stable Repo
baseurl='https://myurl/$releasever/stable/Packages/'
enabled=1
gpgcheck=0
我如何用shell中的纯文本 $releasever
来编写文件?
TLDR:如何在不实际评估变量的情况下从命令行编写一个看起来像变量(即$releasever
)的字符串?
答案 0 :(得分:2)
要防止Bash在您的cat
命令中解释美元符号,只需将第一个EOF放在单引号中,如下所示:
cat > /etc/yum.repos.d/my_stable_repo.repo << 'EOF'
[my_stable_repo]
name=Stable Repo
baseurl='https://myurl/$releasever/stable/Packages/'
enabled=1
gpgcheck=0
EOF
答案 1 :(得分:0)
将$更改为\ $, 这样做:
cat > test_my_stable_repo.repo << EOF
[my_stable_repo]
name=Stable Repo
baseurl='https://myurl/\$releasever/stable/Packages/'
enabled=1
gpgcheck=0
EOF