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

时间:2016-03-03 04:17:07

标签: shell unix solaris 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。

1 个答案:

答案 0 :(得分:2)

没有特定于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
}