我有一个脚本,可以生成要执行的二进制文件列表:
\home\joe\bin\script1
\home\joe\bin\script2
\home\joe\bin\script3
..
问题 1:如何从命令行逐个运行所有这些文件?一种方法是将二进制文件列表复制到临时文件temp.sh
并运行该.sh
文件。是否可以在不创建临时.sh
文件的情况下执行此操作?
问题 2:如何并行运行所有这些文件?
答案1
使用 GNU Parallel:
问题 1:
list_generator_program | parallel -j1
问题2:
list_generator_program | parallel
这将在每个 CPU 核心上并行运行一项作业。
答案2
我猜你例子中的反斜杠应该是斜线
yarl@nb$ pwd
/tmp
yarl@nb$ cat list
#!/bin/sh
echo /tmp/foo
echo /tmp/bar
yarl@nb$ cat foo
#!/bin/sh
echo I say foo
sleep 2
echo I say foo
yarl@nb$ cat bar
#!/bin/sh
echo And I say bar
sleep 2
echo And I say bar
yarl@nb$ cat parallel
#!/bin/sh
./list | while read cmd; do
$cmd &
done
跑步:
./list | sh
在平行下:
./parallel
请注意,如果“list”列出了 n 个文件,则这是并行运行的 n 个作业。如果您想控制它,请使用计数器或 gnu parallel 等。请参阅https://stackoverflow.com/questions/5547787/running-shell-script-in-parallel