我正在尝试编写一个 bash 脚本来自动打印日期命令,但不幸的是,它不起作用。
这是脚本的片段...我已经按照大多数建议使用了“EOF”,但仍然不起作用。
#!/bin/bash
cat<<'EOF'>/etc/yum.repos.d/local.repo
[local]
name=Red Hat Enterprise Linux $releasever - $basearch - Base
baseurl=file:///home/user1/updates-$(date +%d%b%y)
gpgcheck=0
enabled=1
EOF
有人可以帮忙吗?
答案1
不要引用您的此处文档。引用初始EOF
标记(的任何部分)将阻止 shell 执行文档中的任何扩展。自从你想shell 来处理周围的命令替换date
,您需要将文档保留为不带引号的。
如果您想要$releasever
且未$basearch
展开,则需要对其$
前面的进行转义,如下所示:
#!/bin/sh
cat <<EOF >/etc/yum.repos.d/local.repo
[local]
name=Red Hat Enterprise Linux \$releasever - \$basearch - Base
baseurl=file:///home/user1/updates-$(date +%d%b%y)
gpgcheck=0
enabled=1
EOF
另请注意,该脚本最好由其执行,/bin/sh
因为它不包含任何bash
特定内容。
如果您要创建的文件是 TOML 文件,您也可以像这样创建它:
tomlq -n -t \
--arg name 'Red Hat Enterprise Linux $releasever - $basearch - Base' \
--arg baseurl "file:///home/user1/updates-$(date +%d%b%y)" \
--argjson gpgcheck 0 \
--argjson enabled 1 \
'.local = $ARGS.named' >/etc/yum.repos.d/local.repo
这使用tomlq
(TOML 解析器包装器around jq
) 并创建 TOML 输出
[local]
name = "Red Hat Enterprise Linux $releasever - $basearch - Base"
baseurl = "file:///home/user1/updates-29May22"
gpgcheck = 0
enabled = 1
答案2
好吧,我想我找到了答案......我错误地使用了“”。所以我修改了脚本如下。
#!/bin/bash
cat<<EOF>/etc/yum.repos.d/local.repo
[local]
name=Red Hat Enterprise Linux \$releasever - \$basearch - Base
baseurl=file:///home/user1/updates-$(date +%d%b%y)
gpgcheck=0
enabled=1
EOF