Bry*_*son 3 linux bash heredoc
我正在为一个没有 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
Run Code Online (Sandbox Code Playgroud)
但是,这会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`
Run Code Online (Sandbox Code Playgroud)
实际行为
该heredoc生成的文件包含
mkdir -p ~/scheduledBackups/FinalCut-Fri-Aug-05-2016_16
cp -r ~/Documents//* ~/scheduledBackups/FinalCut-Fri-Aug-05-2016_16
Run Code Online (Sandbox Code Playgroud)
您应该EOF在 heredoc 中并$(...)用于命令替换:
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
Run Code Online (Sandbox Code Playgroud)
更新:根据下面 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
Run Code Online (Sandbox Code Playgroud)
上面的命令将$BACKUP_DIR在您当前的环境中使用,但会$(date +%a-%b-%d-%Y_%H)在输出中添加文字。
| 归档时间: |
|
| 查看次数: |
412 次 |
| 最近记录: |