将bash命令作为字符串发送到另一个脚本而不是执行它

时间:2014-12-31 21:57:42

标签: bash shell sed

我试图编写一个脚本来修改和运行另一个脚本。每次我尝试使用sed替换我的其他脚本中的命令行时,该命令实际执行而不是作为字符串发送到另一个脚本。以下是最低工作示例。我无法弄清楚我做错了什么。我想只运行脚本1,然后运行脚本2几次。谢谢!

脚本1:

#!/bin/bash

./script2.sh
./script2.sh
./script2.sh

lineNo=3
var2=(var=$(( RANDOM % 399 )))
sed -i "${lineNo}s/.*/"${var2[@]}"/" script2.sh

./script2.sh
./script2.sh
./script2.sh

脚本2:

#!/bin/bash

var=$(( RANDOM % 199 )) #This line should be replaced with "var=$(( RANDOM % 399 ))" but instead is getting replaced with "var=90" (or some other random number).  i.e. the command is executing.

<... Do stuff with random number stored in $var...>

2 个答案:

答案 0 :(得分:2)

将字符串嵌入单引号中。

var='$(( RANDOM % 199 ))'

答案 1 :(得分:0)

艾略特的回答使我朝着正确的方向前进。

脚本1需要围绕我试图发送到另一个脚本的命令的单引号:

#!/bin/bash

lineNo=3
var2='var=$(( RANDOM % 399 ))'
sed -i "${lineNo}s/.*/$var2/" script2.sh

现在命令进入脚本2而不是沿途执行。