如何根据 ksh 中的标志 运行 后台进程

How to run a process in background depending on a flag in ksh

在 KSH 中,我想 运行 多个命令 运行 根据标志在后台并行或顺序执行。

因此,如果 FLAG 为真,它将 运行 像这样:

command1 &
command2 &
command3 &

command4 &
command5 &
command6 &
wait
command7

但如果标志为 false,那么我需要依次 运行 command1、command2 和 command3。但它不应该影响 运行 命令的宁:command4、command5 和 command6 作为并行批处理本身。 所以如果标志是假的:

(command1; command2; command3;) &
(command4; command5; command6;) &
wait
command7

我也许可以使用 if-elses 来实现它,但是有更好更正确的方法吗?

我在 Solaris 10 上使用 ksh88。

没有 shell 允许在后台批处理中自动分组命令的特定标志。以下是如何使用简单的 case/esac 构造来完成:

case "$flag" in
(true)
    command1 & command2 & command3 &
    command4 & command5 & command6 &
    true
    ;;
(false)
    { command1; command2; command3; } &
    { command4; command5; command6; } &
    true
    ;;
(*)
    echo "Unexpected flag: [$flag]"
    false
    ;;
esac && {
    wait
    command7
}