[英]Create a heredoc that doesn't interpret anything
我正在為一個不熟悉bash的朋友編寫腳本。 該腳本生成一個備份腳本,生成一個crontab並運行crontab來創建一個cron作業。
我想對這些備份進行約會,因此當前的腳本(相關的)是:
cat <<EOF > ~/scheduledBackups/scripts/finalCutScript.bash
mkdir -p ~/scheduledBackups/FinalCut-`date +%a-%b-%d-%Y_%H`
cp -r $BACKUP_DIR/* ~/scheduledBackups/FinalCut-`date +%a-%b-%d-%Y_%H`
EOF
但是,這會生成finalCutScript.bash
,其日期與運行“安裝程序”腳本時的日期相同。
有沒有一種方法可以將heredoc確切地放置在finalCutScript.bash
? 我想將所有內容保存在一個腳本中,以便以后可以使用此腳本框架。
預期的行為:
我想要將Heredoc傳送到的文件包含
mkdir -p ~/scheduledBackups/FinalCut-`date +%a-%b-%d-%Y_%H`
cp -r $BACKUP_DIR/* ~/scheduledBackups/FinalCut-`date +%a-%b-%d-%Y_%H`
實際行為
該Heredoc生成的文件包含
mkdir -p ~/scheduledBackups/FinalCut-Fri-Aug-05-2016_16
cp -r ~/Documents//* ~/scheduledBackups/FinalCut-Fri-Aug-05-2016_16
您應該在heredoc中使用EOF
,並使用$(...)
進行命令替換:
cat <<-'EOF' >~/scheduledBackups/scripts/finalCutScript.bash
mkdir -p ~/scheduledBackups/FinalCut-$(date +%a-%b-%d-%Y_%H)
cp -r $BACKUP_DIR/* ~/scheduledBackups/FinalCut-$(date +%a-%b-%d-%Y_%H)
EOF
更新:根據以下OP的注釋,您也可以在未在當前shell中擴展變量的情況下轉義$
:
BACKUP_DIR='foobar' # variable to be used below in here-doc
cat <<-EOF >~/scheduledBackups/scripts/finalCutScript.bash
mkdir -p ~/scheduledBackups/FinalCut-\$(date +%a-%b-%d-%Y_%H)
cp -r $BACKUP_DIR/* ~/scheduledBackups/FinalCut-\$(date +%a-%b-%d-%Y_%H)
EOF
上面的命令將使用當前環境中的$BACKUP_DIR
,但將在輸出中添加文字$(date +%a-%b-%d-%Y_%H)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.