什麼是從另一個腳本創建bash腳本的一般方法。bash:如何_best_從另一個腳本創建腳本
例如:
$./script1 arg1 arg2 > script2
$./script2
$arg1 arg2
我能想到的幾種方法一樣簡單地呼應輸出,但我不知道是否有更好的方法或命令我不知道和谷歌搜索WASN對我非常有幫助。
在此先感謝您的幫助。
什麼是從另一個腳本創建bash腳本的一般方法。bash:如何_best_從另一個腳本創建腳本
例如:
$./script1 arg1 arg2 > script2
$./script2
$arg1 arg2
我能想到的幾種方法一樣簡單地呼應輸出,但我不知道是否有更好的方法或命令我不知道和谷歌搜索WASN對我非常有幫助。
在此先感謝您的幫助。
輸出從第一個腳本會工作,所以echo
或cat
用定界符應該罰款的任何方式:
cat << EOT
these will be
the lines of
the second script
EOT
如果您不需要額外的文件
$ script1 arg1 arg2 | bash
或如果你想有一個文件
$ script1 arg1 arg2 | tee script2 | bash
但是,如果將它捕獲到文件中,那麼調試腳本通常更容易。另外,有時您不希望腳本無條件執行 - 您希望用戶預先檢查它。但你可以像你說的那樣做(我偶爾也會這樣做),因此我的+1。 – 2010-02-07 22:54:17
哦,另一個單獨的腳本文件的優點;在文件完成之前,沒有任何腳本被執行,而在生成完成之前可以部分執行管道腳本如果發生錯誤,您可能不想執行任何操作,但管道方案會讓您沒有該選項(可以一般情況下不依靠shell執行任何操作)。演示:'cp/dev/null junkfile; {echo「rm junkfile」;睡覺300; } | bash';暫停shell,你會發現垃圾文件是MIA。 – 2010-02-07 22:58:01
一般來說,當你有一個文件科瑞另一個,你正在執行某種模板。雖然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腳本中的大部分事情。
但我不能包含第一個腳本的變量可以嗎? – ranman 2010-02-07 21:43:14
您可以包含任何可以寫入文件的內容,就像使用文本編輯器編寫第二個腳本一樣。 – geoffspear 2010-02-07 21:49:40
@Ranman:在這裏的文檔中用變量代替,所以你可以給shell變量foo分配一些東西,然後在你想輸出的部分 中使用$ foo,它會做你想做的。 – 2010-02-07 21:49:41