Bash 使用killall命令退出脚本是否合乎逻辑?
我正在使用一个引脚生成器,我遇到了一个小问题。 我知道退出脚本的几种不同方法,但是我一直在尝试调用作为子进程运行的同一个脚本,但是当没有调用子进程时,脚本会完全退出。调用时,在子脚本完成并退出后,父脚本不会正确退出,并且父脚本会循环回用户输入。除了可能使用“wait”命令之外,我想不出任何其他方法,尽管我不知道这个命令是否适合此代码。使用“killall”命令退出脚本有什么想法吗?我已经对它进行了测试,正如您在下面的代码中看到的,但是我留下了消息“Terminated”,如果我可以使用killall,我将如何防止该消息打印到标准输出?这是我的密码:Bash 使用killall命令退出脚本是否合乎逻辑?,bash,Bash,我正在使用一个引脚生成器,我遇到了一个小问题。 我知道退出脚本的几种不同方法,但是我一直在尝试调用作为子进程运行的同一个脚本,但是当没有调用子进程时,脚本会完全退出。调用时,在子脚本完成并退出后,父脚本不会正确退出,并且父脚本会循环回用户输入。除了可能使用“wait”命令之外,我想不出任何其他方法,尽管我不知道这个命令是否适合此代码。使用“killall”命令退出脚本有什么想法吗?我已经对它进行了测试,正如您在下面的代码中看到的,但是我留下了消息“Terminated”,如果我可以使用killa
#!/bin/bash
clear
echo ""
echo "Now generating a random pin."
sleep 3
echo ""
echo "----------------------------------------------"
echo ""
# Generates a random 8-digit number
gen_num=$(tr -dc '0-9' </dev/urandom | head -c 8)
echo " Pin = $gen_num "
echo ""
echo "Pin has been generated!"
sleep 3
echo ""
clear
PS3="Would you like to generate another pin?: "
select CHOICE in "YES" "NO"
do
if [ "$CHOICE" == "YES" ]
then
bash "/home/yokai/Modules/Wps-options.sh"
elif [ "$CHOICE" == "NO" ]
then
clear
echo ""
echo "Okay bye!"
sleep 3
clear
killall "Wps-options.sh"
break
exit 0
fi
done
exit 0
#/bin/bash
清楚的
回声“”
echo“正在生成一个随机pin。”
睡眠3
回声“”
回声“----------------------------------------------------”
回声“”
#生成一个随机的8位数字
gen_num=$(tr-dc'0-9'首先,当您执行
bash "/home/yokai/Modules/Wps-options.sh"
脚本分叉并装箱子进程,然后等待子进程终止,并且不会继续执行,除非脚本Wps options.sh在后台执行其他内容(再次分叉)没有收获它的孩子。但我不能告诉你更多,因为我不知道你的脚本中有什么Wps选项。sh
要防止在执行killall时将消息打印到stdout,请执行以下操作:
killall "Wps-options.sh" 1> /dev/null 2> /dev/null
1>表示标准输出重定向到文件/dev/null,2>表示标准输出重定向到文件/dev/null,您不需要递归调用同一个脚本(然后杀死它的所有实例)。以下脚本在不分叉的情况下执行任务:
#!/bin/bash
gen_pin () {
echo 'Now generating a random pin.'
# Generates a random 8-digit number
gen_num="$(tr -dc '0-9' </dev/urandom | head -c 8)"
echo "Pin = ${gen_num}"
PS3='Would you like to generate another pin?:'
select CHOICE in 'NO' 'YES'
do
case ${CHOICE} in
'NO')
echo 'OK'
exit 0;;
*)
break;;
esac
done
}
while true
do
gen_pin
done
!/bin/bash
gen_引脚(){
echo“正在生成一个随机pin。”
#生成一个随机的8位数字
根数=”$(tr-dc'0-9'让我困惑的是,尽管语法是功能性的,但在子进程结束并退出后,父进程也打算结束并退出,但它将循环回用户输入。到目前为止,这是整个脚本。我将它用作一个简单的可选脚本,从另一个进程调用,但我没有其他cal我还没有完成这个特定的脚本。所以我在这里发布的代码是到目前为止的完整代码。感谢您提供的stdout信息。孩子唯一应该分叉自己孩子的方法是如果“是”选项在子进程内运行,但我尚未执行此操作。脚本Wps-options.sh也是我发布的代码。它正在作为子进程运行自身的第二个实例。如果要再次执行同一脚本,但不创建子进程,请使用exec“$0”
--这假设您的脚本是可执行的,并且可以在$PATH.Ref 100%解决方案中找到。非常感谢您,先生。这将以非常有效的方式降低资源成本。恭喜您。很高兴听到它对您有效!请记住,select控件结构也是一个循环!循环将一直持续到中断(CTRL+C)遇到,因此不需要while循环