使用cat << EOT >>插入实际的字符串和转义逻辑

wblakecannon

我正在编写脚本以在AWS临时卷上自动创建SWAP。该过程的一部分需要脚本“感知”要应用交换的nvme,因为AWS Linux可以在停止/启动时对nvme名称进行重新排序。

我正在使用Terraform运行“启动”脚本,该脚本会对实例执行大量工作。其中之一是将脚本插入/ opt / scripts,然后添加crontab,它将运行此自动交换脚本@reboot。

但是,当我运行Terraform启动脚本时,它将用我的逻辑结果而不是我想要在/opt/scripts/swap.sh中使用的实际脚本替换cat EOT。

这是我的EOT启动脚本的一部分:

# Create auto-swap script
mkdir /opt/scripts
cat <<EOT >> /opt/scripts/swap.sh
#!/bin/bash
exec 3>&1 4>&2
trap 'exec 2>&4 1>&3' 0 1 2 3
exec 1>/opt/scripts/swap.log 2>&1
# Create SWAP partition
sudo mkswap $(lsblk | grep  "279.4G" | cut -d " " -f1 | perl -ne 'print "/dev/$_"')
sudo swapon $(lsblk | grep  "279.4G" | cut -d " " -f1 | perl -ne 'print "/dev/$_"')
swapon -s
EOT

运行Terraform后,这是/opt/scripts/swap.sh内部的内容:

#!/bin/bash
exec 3>&1 4>&2
trap 'exec 2>&4 1>&3' 0 1 2 3
exec 1>/opt/scripts/swap.log 2>&1
# Create SWAP partition
sudo mkswap /dev/nvme1n1
sudo swapon /dev/nvme1n1
swapon -s

我需要猫EOT来将我在脚本中显示的内容完全创建到/opt/scripts/swap.sh中,而不是自己想出的/ dev / nvme1n1中。我该怎么做呢?

/opt/scripts/swap.sh的所需内容:

#!/bin/bash
exec 3>&1 4>&2
trap 'exec 2>&4 1>&3' 0 1 2 3
exec 1>/opt/scripts/swap.log 2>&1
# Create SWAP partition
sudo mkswap $(lsblk | grep  "279.4G" | cut -d " " -f1 | perl -ne 'print "/dev/$_"')
sudo swapon $(lsblk | grep  "279.4G" | cut -d " " -f1 | perl -ne 'print "/dev/$_"')
swapon -s
切普纳

您需要引用定界符;现在,这里的文档被当作双引号括起来的字符串,因此命令替换被立即评估

# Create auto-swap script
mkdir /opt/scripts
cat <<'EOT' >> /opt/scripts/swap.sh
#!/bin/bash
exec 3>&1 4>&2
trap 'exec 2>&4 1>&3' 0 1 2 3
exec 1>/opt/scripts/swap.log 2>&1
# Create SWAP partition
sudo mkswap $(lsblk | grep  "279.4G" | cut -d " " -f1 | perl -ne 'print "/dev/$_"')
sudo swapon $(lsblk | grep  "279.4G" | cut -d " " -f1 | perl -ne 'print "/dev/$_"')
swapon -s
EOT

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用jQuery转义HTML字符串

转义字符串以在XML中使用

在字体声明中仍然需要eot,ttf和svg吗?

如何使用cat / grep字符串以分号分隔

format('embedded-opentype')和format('eot')之间的区别

从字符串中删除以SOT开头并以EOT结尾的子字符串

Bootstrap-关于字体文件(.eot .svg .ttf .woff和.woff2)的角色和用法

如何使用Babel正确加载.eot和.woff文件?

PHP尚未使用实体转义的字符串转义

在EOT内插入带有PHP变量的python代码

终止[用户]。在Prolog中带有EOT字符

无法使用ABAP来转义转义的字符串

从字符串EOT逗号ETX中删除控制字符序列

使用$插值和@编码转义字符串

使用转义的引号,然后用大括号插入内插字符串

使用JavaScript在字符串中最后关闭div后转义或插入

使用jQuery作为HTML将转义的字符串插入DIV中

IE8中无法使用eot字体类型

写入的* .txt文件结尾处有EOT,FF,Z 、?和其他花式字符

通过串行端口接收EOT时,外壳程序中的cat命令不会终止

我可以混合使用Cat 5和Cat 6吗?

EOT和EOF之间的区别

在EOT内插入php代码

如何读tty直到EOT或bash中的其他字符?

如何使用sed在同一行中的数学字符串后转义特殊字符并插入字符串

带有文件加载器和 webpack 的 eot 文件中的 SyntaxError

如何使用`:`和`=`在特定字符串后插入行?

使用查询字符串查询访问 _cat/indices 信息

`cat EOF` 和 `cat EOT` 有什么区别,我应该什么时候使用它?