bash - 捕获嵌入在 bash 函数中的对话框调用的结果
问题描述
我想dialog
从 bash 的通用函数中调用 unix 编辑框。我感兴趣的两个结果是:
- 如果用户点击确定,我想捕捉用户在编辑框中输入的内容
- 检测用户是否点击取消
这是我的一些代码,但我不确定这是否是最好的方法:
function ib_generic()
{
tmp_file="/tmp/file.tmp"
if [ -f $tmp_file ]
then
rm -f $tmp_file
fi
mkfifo $tmp_file
# push the user input to $tmp_file
dialog --stdout \
--title "$1" \
--backtitle "My Backtitle" \
--inputbox "$2" 20 40 2> $tmp_file &
# detect 'cancel' or 'escape':
if [[ $? -eq 0 || $? -eq 255 ]]
then
rm -f $tmp_file
echo 1
else # 'ok' was pressed so proceed:
result="$( cat /tmp/file.tmp )"
rm -f $tmp_file
echo $result
fi
}
如果点击 OK,取消结果的最佳方法是什么,如果没有,如何检测 Cancel 或 Escape?
解决方案
不要dialog
在后台运行,因为它不会等待它完成并且不会设置$?
.
您也有错误的退出状态。0
手段OK
被按下,1
手段Cancel
,和255
手段Escape
。
dialog --stdout \
--title "$1" \
--backtitle "My Backtitle" \
--inputbox "$2" 20 40 2> "$tmp_file"
exit=$?
if [ $exit -eq 0 ] # OK was pressed
then
echo "$result"
elif [ $exit -eq 1 ] || [ $exit -eq 255 ] # Cancel or Escape was pressed
then
echo 1
else
echo 2
fi
这里有一个更完整的例子
推荐阅读
- python - 如何使用 python selenium 获取不同元素源中的属性值
- tableau-desktop - 为什么在向仪表板添加筛选器时收到 Tableau 错误 6EA18A9E
- python - 如何将 db 获取的数据与 django 中用户选择的输入进行比较
- c# - asp net core发生错误时如何记录请求url?
- css - Tailwind 每次编译时都会生成错误的类
- android - 尝试在 Android 上运行我的 React Native 应用程序时出错
- autocomplete - 自动完成材料-ui 默认/首选项搜索
- java - 尝试使用 OracleDataSource 在 19c DB 中获取连接时出错
- vue.js - Vue 路由器(历史模式)和 Webpack 外部重定向处理
- sockets - 使用静态端口配置从 tcp 中的一个客户端套接字连接两个服务器套接字