【发布时间】:2020-11-02 04:21:40
【问题描述】:
我写了一个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
任务 1,2 ... 6 是像 /usr/bin/php task1.php $TIME 一样运行的 php 脚本,其中 $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
似乎 bash 将我的输入 2 解释为与 read MODE 不对应的参数,而不是导致错误的 bash run.sh 2。我无法更改脚本,使任务 1-6 像 task 1 & task 2 & 等在后台运行,因为任务 2 只能在任务 1 完成后开始运行。
我怎样才能完成我想做的事?
【问题讨论】:
-
如果你把运行 run.sh 的 bash 进程放到后台,它怎么会要求用户输入呢?要么只是将您担心的任务放到后台,或者更好的是,不要在标准输入上要求输入,而是将 MODE_passed 作为脚本的参数。在 shell 脚本中,交互式请求输入很少是一个好主意。
标签: linux bash shell scripting