我对.sh使用脚本在脚本中运行一组任务的区别或优势(如果有的话)感到困惑GNU parallel
例如Ole Tange的回答:
parallel ./pngout -s0 {} R{} ::: *.png
Run Code Online (Sandbox Code Playgroud)
而不是说通过它们循环将它们放在背景中&。
例如froschutz的回答:
#copied from the link for illustration
for stuff in things
do
( something
with
stuff ) &
done
wait # for all the something with stuff
Run Code Online (Sandbox Code Playgroud)
简而言之,它们只是在语法上或实际上不同吗?如果实际上不同,我应该什么时候使用它们?
我想并行化for以下代码的循环。这该怎么做?
#!/bin/bash
N=$1
n=$2
for (( i=1; i<=$N; i++ )); do
min=100000000000000 //set min to some garbage value
for (( j=1; j<=$n; j++ )); do
val=$(/path/to/a.out)
val2=`echo $val | bc`
if (( $val2 < $min )); then
min=$val2;
fi
done
arr=("${arr[@]}" "$min")
doneRun Code Online (Sandbox Code Playgroud) 我有一个小脚本,它循环遍历文件夹的所有文件并执行(通常是持久的)命令。基本上是
for file in ./folder/*;
do
./bin/myProgram $file > ./done/$file
done
Run Code Online (Sandbox Code Playgroud)
(请忽略语法错误,这只是伪代码)。
我现在想同时运行这个脚本两次。显然,如果 ./done/$file 存在,则不需要执行。所以我把脚本改成了
for file in ./folder/*;
do
[ -f ./done/$file ] || ./bin/myProgram $file >./done/$file
done
Run Code Online (Sandbox Code Playgroud)
所以基本上问题是:两个脚本(或通常不止一个脚本)是否可能实际上处于同一点并检查done失败且命令运行两次的文件是否存在?
这将是完美的,但我非常怀疑。这太容易了 :D 如果他们处理同一个文件可能发生,是否有可能以某种方式“同步”脚本?
我刚刚获得了一个 24 核 VPS 的帐户(根据 UnixBench 有 24 个 CPU)。