2012-05-18 90 views
1

我有一個腳本,我輸出三個東西到一個文件中。我只想撥打>運營商一次。有沒有辦法來描述一個指令?我應該使用一個函數嗎?如何在shell中重新分組命令以避免重複的重定向?

#!/bin/sh 

for i in $(ls src) 
do 
    f=${i%.*} 
    echo 'first bit' > dist/$i.htm 
    perl myScriptThatOutputsSecondBit.pl >> dist/$i.htm 
    echo 'third bit' >> dist/$i.htm 
done 

回答

3

使用compound/group命令:

要在當前-shell中運行它,

{echo 'first bit';perl myScriptThatOutputsSecondBit.pl;echo 'third bit';} > dist/$i.htm 


要在子shell中運行它,

(echo 'first bit';perl myScriptThatOutputsSecondBit.pl;echo 'third bit') > dist/$i.htm 
+0

感謝很多:) – m09

0

寫一個簡單的日誌功能,這會更有效率。例如

log(){ 
    echo $1 >> dist/$i.htm 
} 

,然後從腳本中調用它:

for i in $(ls src) 
do 
    f=${i%.*} 
    log 'first bit' 
    perl myScriptThatOutputsSecondBit.pl >> dist/$i.htm 
    log 'third bit' 
done 
+0

怎麼會是更有效率? – m09

+0

效率放在一邊,你重複兩次這正是我想要避免的路徑 – m09

+0

在邏輯上有效的意義和代碼看起來更模塊化。約翰的答案對於這種情況來說是完美的,但是如果你有很長的和複雜的shell腳本以及許多這樣的echo語句呢?你會分組100個命令並在最後重定向所有輸出? – mtk