2014-12-31 68 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

相關問題