2014-06-15 51 views
0

我想使文件的多個副本,我能夠做這樣的... ...DD與多輸出腳本

dd if=~/learndir/source.txt | tee >(dd of=~/learndir/un.txt) | tee >(dd of=~/learndir/deux.txt) | tee >(dd of=~/learndir/trois.txt) | tee >(dd of=~/learndir/quatre.txt) | dd of=~/learndir/cinque.txt 

我的問題是,這部作品在終端而不是在一個腳本。下面是我嘗試執行相同的語法,腳本...

#!/bin/sh 

dd if=~/learndir/source.txt | tee >(dd of=~/learndir/un.txt) | tee 
>(dd of=~/learndir/deux.txt) | tee >(dd of=~/learndir/trois.txt) | tee >(dd of=~/learndir/quatre.txt) | dd of=~/learndir/cinque.txt 

,我得到以下錯誤...

~$ sh duplicate5.sh 
> duplicate5.sh: 2: duplicate5.sh: Syntax error: "(" unexpected 

我不明白爲什麼它的作品在我的美元提示但不在腳本中。

+0

你的shell是'/斌/ bash'和'/箱/ bash'與'/ bin/sh'的行爲不同。在腳本中使用'#!/ bin/bash',它應該可以。 –

回答

5

您的殼牌是/bin/bash/bin/bash/bin/sh的行爲不同。在腳本中使用#!/bin/bash,它應該可以。此外,該腳本中有一個不好的換行符。

順便說一句,tee單個副本可以寫入多個文件可在單個調用:

dd if=~/learndir/source.txt | 
tee >(dd of=~/learndir/un.txt) \ 
    >(dd of=~/learndir/deux.txt) \ 
    >(dd of=~/learndir/trois.txt) \ 
    >(dd of=~/learndir/quatre.txt) | 
dd of=~/learndir/cinque.txt 

但使用ddprocess substitution似乎這裏是多餘的:

cat ~/learndir/source.txt | 
tee ~/learndir/un.txt ~/learndir/deux.txt ~/learndir/trois.txt ~/learndir/quatre.txt \ 
    > ~/learndir/cinque.txt 

甚至:

tee < ~/learndir/source.txt \ 
    ~/learndir/un.txt ~/learndir/deux.txt ~/learndir/trois.txt ~/learndir/quatre.txt \ 
    > ~/learndir/cinque.txt 

I/O重定向離子可以出現在這個腳本以任意順序,所以這也適用:

tee < ~/learndir/source.txt > ~/learndir/cinque.txt \ 
    ~/learndir/un.txt ~/learndir/deux.txt ~/learndir/trois.txt ~/learndir/quatre.txt 

或者:

tee ~/learndir/un.txt ~/learndir/deux.txt ~/learndir/trois.txt ~/learndir/quatre.txt \ 
    < ~/learndir/source.txt > ~/learndir/cinque.txt 

等等

+0

Johnathan,感謝您的快速回答。 – user3738926