日付印刷コマンドを自動化するために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
シェルがドキュメントで拡張を実行できなくなります。あなたが〜した後考えるシェルでコマンド置換を処理するには、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パーサーラッパー周辺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