2014-12-31 32 views
1

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

脚本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...> 

回答

0

艾略特的回答促使我朝正确的方向发展。

脚本1需要围绕命令的单引号,我试图发送到其他脚本:

#!/bin/bash 

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

现在命令进入SCRIPT2,而不是沿途被执行。

2

嵌入在单引号的字符串。

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

问题不在于RANDOM行没有执行,问题是它正在执行。我希望它作为一个字符串进入而不是被执行。也许我没有说清楚 – shutch

相关问题