【发布时间】:2015-02-21 00:52:33
【问题描述】:
我有一个bash 脚本,它通过将包含expect 代码片段的数十个不同文件拼接在一起来创建和执行expect 脚本。这些文件包含需要扩展的环境变量。示例:
expect.piece:
send "command\r"
sleep $timeout
send "command argument\r"
script.sh:
#let's try it like this
eval echo $(cat expect.piece)
#or maybe like this
eval "echo \"$(cat expect.piece)\""
输出:
send command\r sleep 1 send command argument\r
send commandr
sleep 1
send command argumentr
期望的输出:
send "command\r"
sleep 1
send "command argument\r"
我需要一个没有sed 字符串替换(有很多环境变量)并且不修改原始expect 脚本文件的解决方案。我想它可以逐行完成,但有没有更优雅的解决方案?
【问题讨论】:
-
你想执行你想要的输出还是只是想在你的 bash 脚本中打印它?因为 eval 将尝试执行 echo 命令的输出,即它将尝试在 bash 脚本中执行
send,这是一个期望的命令而不是 bash 的 -
我需要创建一个稍后将使用
expect执行的脚本。 -
bash对这种模板扩展没有很好的支持。相反,请将变量保留在expect.piece中,并确保在适当的环境中执行它,例如timeout的值为 1。 -
好的,但是让我们重新考虑
sed然后(仍然不是题外话),如果我有一个像这样的巨大替换队列:sed "s/\$timeout/$timeout/g;s/\$var/$var/g"(有效,但有很多变量)可以将其简化为将 \$whatever 替换为 $whatever 的值?
标签: bash variables eval expect expand