使用expect编写bash脚本

使用expect编写bash脚本

我正在尝试使用expect 编写一个bash 脚本。该 bash 脚本将驻留在远程服务器上,并在稍后的日期/时间执行。我正在使用 Expect 读取一个大数据文件,对其执行一些处理,并使用适当的值写出 bash 脚本。为此,我设置了一个变量来保存 bash 脚本的值:

set awk_cmd "awk '\{print \\\$3\}'"
if {$reboot==$reboot_N} {
set command5 "echo '#!/bin/bash\n\ndeclare -i last_reboot=\$(w | grep up | grep days | ${awk_cmd})\n\nif (( \$last_reboot !< 8 )); then\necho \"Your ..."' > /root/script.sh

显然我已经编辑了 echo 命令的很大一部分。但是,我收到的错误是在 ${awk_cmd} 部分。 awk 使用格式“awk '{print $3}'”。

但是,我无法将单引号打印到 bash 脚本。上面打印出不带引号的 {print $3} ,并且所有在 awk 命令中转义单引号的尝试都失败了。

请注意,我已经在其中使用了双引号和单引号。除了 awk 命令之外,我的命令中的所有内容都有效。

我缺少什么?

编辑:为了使其更简单(我希望),我尝试在单引号字符串内传递文字单引号

答案1

我想我已经明白了。

set command5 "echo '#!/bin/bash\n\ndeclare -i last_reboot=\$(w | grep up | grep days | awk '\\\''\{print \$3\}'\\\'')\n\nif....." > script.sh

上面的结果如下:

#!/bin/bash

declare -i last_reboot=$(w | grep up | grep days | awk '{print $3}')

if (( $last_reboot >= 7 )); then
echo "Your ..."

我找到了答案这里。我只是还没有弄清楚正确的转义顺序。

相关内容