2010-02-07 164 views
4

什麼是從另一個腳本創建bash腳本的一般方法。bash:如何_best_從另一個腳本創建腳本

例如:

$./script1 arg1 arg2 > script2 
$./script2 
$arg1 arg2 

我能想到的幾種方法一樣簡單地呼應輸出,但我不知道是否有更好的方法或命令我不知道和谷歌搜索WASN對我非常有幫助。

在此先感謝您的幫助。

回答

3

輸出從第一個腳本會工作,所以echocat用定界符應該罰款的任何方式:

cat << EOT 
these will be 
the lines of 
the second script 
EOT 
+0

但我不能包含第一個腳本的變量可以嗎? – ranman 2010-02-07 21:43:14

+0

您可以包含任何可以寫入文件的內容,就像使用文本編輯器編寫第二個腳本一樣。 – geoffspear 2010-02-07 21:49:40

+0

@Ranman:在這裏的文檔中用變量代替,所以你可以給shell變量foo分配一些東西,然後在你想輸出的部分 中使用$ foo,它會做你想做的。 – 2010-02-07 21:49:41

1

如果您不需要額外的文件

$ script1 arg1 arg2 | bash 

或如果你想有一個文件

$ script1 arg1 arg2 | tee script2 | bash 
+0

但是,如果將它捕獲到文件中,那麼調試腳本通常更容易。另外,有時您不希望腳本無條件執行 - 您希望用戶預先檢查它。但你可以像你說的那樣做(我偶爾也會這樣做),因此我的+1。 – 2010-02-07 22:54:17

+1

哦,另一個單獨的腳本文件的優點;在文件完成之前,沒有任何腳本被執行,而在生成完成之前可以部分執行管道腳本如果發生錯誤,您可能不想執行任何操作,但管道方案會讓您沒有該選項(可以一般情況下不依靠shell執行任何操作)。演示:'cp/dev/null junkfile; {echo「rm junkfile」;睡覺300; } | bash';暫停shell,你會發現垃圾文件是MIA。 – 2010-02-07 22:58:01

1

一般來說,當你有一個文件科瑞另一個,你正在執行某種模板。雖然bash能夠做到這一點,但您可能需要考慮另一種工具。 m4是GNU工具鏈中常用的工具。對於更基本的模板,你可以這樣做以下perl腳本:

perl -pne BEGIN { open my $fh, $ENV{SERVER_PROPERTIES_FILE} or die $!; \ 
%hash = map { chomp; split /=/ } <$fh>; } s/\${(.*)}/$hash{$1} or die "missing $1"/eg' <  "${SERVER_XML_FILE} 

如果您不需要第二個文件,可以完成使用此文件和內聯執行的bash腳本中的大部分事情。