我想制作一个文件的多个副本,我能够像这样做...
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
Run Code Online (Sandbox Code Playgroud)
我的问题是,这在终端中有效,但在脚本中无效.这是一个与我尝试执行的语法相同的脚本...
#!/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
Run Code Online (Sandbox Code Playgroud)
我收到以下错误...
~$ sh duplicate5.sh
> duplicate5.sh: 2: duplicate5.sh: Syntax error: "(" unexpected
Run Code Online (Sandbox Code Playgroud)
我不明白为什么它在我的美元提示下工作但不在脚本中.
你的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
Run Code Online (Sandbox Code Playgroud)
但是在这里使用dd和处理替换似乎是多余的:
cat ~/learndir/source.txt |
tee ~/learndir/un.txt ~/learndir/deux.txt ~/learndir/trois.txt ~/learndir/quatre.txt \
> ~/learndir/cinque.txt
Run Code Online (Sandbox Code Playgroud)
甚至:
tee < ~/learndir/source.txt \
~/learndir/un.txt ~/learndir/deux.txt ~/learndir/trois.txt ~/learndir/quatre.txt \
> ~/learndir/cinque.txt
Run Code Online (Sandbox Code Playgroud)
I/O重定向可以在此脚本中以任意顺序出现,因此这也有效:
tee < ~/learndir/source.txt > ~/learndir/cinque.txt \
~/learndir/un.txt ~/learndir/deux.txt ~/learndir/trois.txt ~/learndir/quatre.txt
Run Code Online (Sandbox Code Playgroud)
要么:
tee ~/learndir/un.txt ~/learndir/deux.txt ~/learndir/trois.txt ~/learndir/quatre.txt \
< ~/learndir/source.txt > ~/learndir/cinque.txt
Run Code Online (Sandbox Code Playgroud)
等等.