从文件读取时,运行以下命令可以完成我想要的操作:
parallel --gnu -j2 "echo {} && sleep 5" < myfile.txt
我想用管道做类似的事情。请注意,我使用以下页面作为管道阅读器和编写器的灵感:http ://www.linuxjournal.com/content/using-named-pipes-fifos-bash
这是我的管道阅读器文件:
#!/bin/bash
pipe=/tmp/testpipe
trap "rm -f $pipe" EXIT
if [[ ! -p $pipe ]]; then
mkfifo $pipe
fi
while true
do
parallel --gnu -j2 "echo {} && sleep 5" <$pipe
done
echo "Reader exiting"
这是我的作家:
#!/bin/bash
pipe=/tmp/testpipe
if [[ ! -p $pipe ]]; then
echo "Reader not running"
exit 1
fi
if [[ "$1" ]]; then
echo "$1" >$pipe
else
echo "Hello from $$" >$pipe
fi
然后我多次运行 pipeWriter,例如
$ ./pipeWriter one
$ ./pipeWriter two
$ ./pipeWriter three
$ ./pipeWriter four
$ ./pipeWriter five
$ ./pipeWriter six
$ ./pipeWriter seven
$ ./pipeWriter eight
$ ./pipeWriter nine
$ ./pipeWriter ten
$ ./pipeWriter ww
$ ./pipeWriter wwdfsdf
$ ./pipeWriter wwdfsdfsddfsd
$ ./pipeWriter testAgain
运行 pipeReader 的 shell 显示:
$ ./pipeReader
one
four
eight
ww
testAgain
首先,存在数据缺失的问题。其次,parallel 在管道中似乎并不并行运行。我希望它一次运行两个工作(或者更确切地说,最多两个工作。如果它只有一个工作,那很好,如果另一个工作可以启动它)。
我哪里错了?