我正在为一个不熟悉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,其日期与运行"installer“脚本的日期相同。
有什么方法可以在finalCutScript.bash中准确地放置这个本地文档吗?我希望将所有内容都保存在一个脚本中,以便以后可以使用这个脚本框架。
精化
预期行为:
我想要用管道连接到的文件中包含
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发布于 2016-08-05 20:09:00
您应该在本文档中使用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)。
https://stackoverflow.com/questions/38796968
复制相似问题