alb*_*789 1 linux bash shell scripting
我写了一个shell脚本run.sh来根据用户的输入触发一些任务
#!/bin/bash
echo "Please choose mode [1-3]: "
read MODE
case $MODE in
1)
echo -n "Enter iteration: "
read TIME
echo "Start Updating ..."
task 1 && task 2 && task 3
;;
2)
echo -n "Enter Seed Value: "
read SEED
echo "Start Updating ..."
task 4
task 5
;;
3)
echo -n "Enter regression minimum value: "
read MIN
echo "Start Updating ..."
task 6
;;
*)
echo -n "Unknown option - Exit"
;;
esac
Run Code Online (Sandbox Code Playgroud)
任务 1,2 ... 6 是 php 脚本,它们的运行方式类似于/usr/bin/php task1.php $TIME$TIME 作为 php 脚本等的参数...
当我打字时脚本运行良好,bash run.sh但由于任务 1-6 需要很长时间才能完成,我想要一个选项,在我与终端断开连接时在后台运行脚本。但是,如果我使用运行脚本,则会bash run.sh &遇到如下错误:
Please choose mode [1-3]: 2
-bash: 2: command not found
[5]+ Stopped bash run.sh
Run Code Online (Sandbox Code Playgroud)
似乎 bash 将我的输入解释2为一个不对应的参数,read MODE而不是bash run.sh 2导致错误的参数。我无法更改脚本以使任务 1-6 在后台运行task 1 & task 2 &等,因为任务 2 只能在任务 1 完成后开始运行。
我怎样才能完成我想做的事?
您可以在后台子shell中按顺序运行所有这些任务
( task 1; task 2; task 3 ) &
Run Code Online (Sandbox Code Playgroud)
试试这个:
( echo "One"; sleep 1; echo "Two"; sleep 2; echo "Three"; sleep 3; echo "Done" ) &
Run Code Online (Sandbox Code Playgroud)
你也可以让这个看起来更像脚本:
(
echo "One"
sleep 1
echo "Two"
sleep 2
echo "Three"
sleep 3
echo "Done"
) &
Run Code Online (Sandbox Code Playgroud)
随意使用有用的 envar $BASH_SUBSHELL
( echo $BASH_SUBSHELL; ( echo $BASH_SUBSHELL ) )
Run Code Online (Sandbox Code Playgroud)