2014-03-04 59 views
1

我有一個簡單的bash腳本調用另一個腳本10倍:呼叫從我的bash腳本另一個bash腳本,給它一些輸入值

#!/bin/sh 

val=10 
for i in `seq $val` 
do 
     ./script2.sh flename$i 
done 

script2.sh需要2個輸入參數(不CMD參數,兩個輸入變量)(對我來說,什麼參數並不重要,它們可能只是一些2個相同的字符串)。現在=我如何將這兩個相同的字符串傳遞給我的for循環中的script2.sh

我嘗試這樣做:

./script2.sh flename$i | string1 | string1

但我希望它這是行不通的。

+0

你在使用'|'的呢? –

+0

爲什麼不只是導出兩個環境變量?你能不能顯示script2.sh以更好地理解你想要做什麼? – spider

+2

「兩個輸入變量」是什麼意思? 'script2.sh'是否從標準輸入中讀取兩行?它是否假設其環境中會存在特定變量? – chepner

回答

1

該語法會是這樣的

printf '%s\n' "$string1" "$string2" | ./script2.sh filename"$i" 

您也可以使用此文件:

./script2.sh filename"$i" <<____HERE 
$string1 
$string2 
____HERE 

有些人會告訴你echo,但它有各種各樣的可移植性問題等; printf統一標準,更安全。但是,如果它只有兩個字符串的靜態行,你當然可以做

echo 'string1 
string2' | ./script2.sh filename "$i" 

(是的,這是一個單引號字符串在中間換行)或稍差有效

(echo string1; echo string2) | ./script2.sh filename"$i" 

的管道的一般語法是command1 | command2 | command...,所以你不能工作,除非string1是一個產生所需輸出的命令。 (這不是不可能的,但在這種情況下可能不是一個好主意。)但最重要的是,你將腳本的輸出傳送到string1,你明顯想要反過來。

任何產生合適輸出的命令都可以用來給管道輸送;如果您需要大量輸入,請嘗試yes,專門爲此目的而存在;

yes string1 | head -n 2 | ./script2.sh filename"$i" 

這裏,yes打印的string1線(以及,當管道被關閉head它結束)的環形序列; head只穿過前兩個。

0

你只需要使用

./script2.sh flename$i "string1" "string2" 

然後在SCRIPT2,文件名$我將作爲$ 1,字符串1爲$ 2,1和字符串港幣$ 24