在 shell 中批量启动多个计算

launch several computation in batch in a shell

我有 16 个计算要做,我想批量启动它以便同时使用我机器的 16 个核心。 我想做一个这样的 shell 脚本:

#!/bin/ksh
for i in `seq 16`
do
  cd directory$i
  <batch command>
done

可能吗?

可以。 你只需要确保它们 运行 作为后台任务,例如:

#!/bin/ksh
for i in `seq 16`
do
  cd directory$i
  <batch command> &
done

否则,它只会按顺序 运行 作业。您可能还想确保您也等待它们全部完成,方法是使用 wait:

#!/bin/ksh
for i in `seq 16` ; do
  cd directory$i
  <batch command> &
done
wait # May depends on shell, bash/ksh waits for all

无需反引号(外部命令)

#!/bin/ksh
for d in  dir{1..16}; do
    echo $d &
done
wait
echo done

顺便说一句 schellcheck.net 会说:

Use $(..) instead of legacy `..`