我想制作一个文件的多个副本,我能够像这样做......
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 :(得分:5)
您的shell为/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
但是在这里使用dd
和process 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
等