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

이것은 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

관련 정보