使用变量添加YUM Repos

时间:2017-06-12 06:38:34

标签: bash shell yum rhel

我正在尝试从命令行添加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)的字符串?

2 个答案:

答案 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