Bashスクリプトのheredocから日付コマンドを印刷できません。

Bashスクリプトのheredocから日付コマンドを印刷できません。

日付印刷コマンドを自動化するために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

これはtomlqTOMLパーサーラッパー周辺jq)とTOML出力の生成

[local]
name = "Red Hat Enterprise Linux $releasever - $basearch - Base"
baseurl = "file:///home/user1/updates-29May22"
gpgcheck = 0
enabled = 1

おすすめ記事