我正在使用脚本来管理外部潜水的内容。最后,我想让用户选择离开或卸载驱动器。如果用户没有响应,我想添加一个超时并使用第二个选项(什么都不做)。
我对 Linux 还很陌生,到目前为止我发现的参考资料对于我目前的 linux 水平来说太神秘了。似乎参考作者假设每个人都已经精通 Linux。:)
如何为此添加超时或使用超时和默认操作的更好方法?
注意:“myDrives”是我自己的程序来处理文件等的关闭和卸载
echo "Do you want to un-Mount the External Drives?"
echo ""
select yn in "yes" "no"; do
case $yn in
yes ) sudo myDrives --unmount;
break;;
no ) break;;
esac
done
kill -9 $PPID
这是使用
-t timeout
bashread
内置选项的一种方法:从bash
help read
提示符或man bash
.这是另一种方法:
需要注意的关键点:
timeout
需要一个实际的过程,而不是 shell 命令。在这里,我们bash
将 shell 作为单独的进程生成,并让它完成驱动的工作select
。printf
在外部使用timeout
以避免通过管道发送其文本while read -r answer; do . . .done
当且仅当它通过管道接收到某些东西时才会运行。因此,如果前一个bash
进程超时,它将不会运行 - 您的默认操作是不做任何事情。while
循环通过管道接收到一些东西,它会检查它是否是yes
答案,否则 - 它什么也不做您可以使用以下考虑的TMOUT变量
select
: