我正在开发一个简单的bash脚本菜单,我已经跟着this guide开始了。
它工作正常,但我不太喜欢将stderr重定向到文件然后在主循环中使用。
在我的脚本中,我有一些功能可以绘制不同的东西。我正在尝试修改它们而不必写入文件。绘制菜单的功能之一看起来像是(简化):
function render_menu()
{
dialog --clear --backtitle "$backtitle" --title "Some Title" --menu "My fancy menu" 50 15 4 "one" "option 1" "two" "option 2"
echo $?
}
它从主循环调用,如:
while true; do
selection="$(render_menu)"
case $selection in
Quit) break;;
Back) #some logic;;
*) #some logic;;
esac
done
但它不起作用,当我运行脚本时,我看不到菜单。我假设因为dialog
的输出已被重定向?
我希望它工作的方式是显示对话框,其输出存储在变量selection
中。这可能不需要外部文件吗?如果没有,为什么呢?
答案 0 :(得分:0)
尝试:
#!/bin/bash
#
function render_menu()
{
exec 3>&1
selection=$(dialog --clear --backtitle "$backtitle" --title "Some Title" --menu "My fancy menu" 50 15 4 "one" "option 1" "two" "option 2" 2>&1 1>&3)
exit_code=$?
exec 3>&-
}
render_menu
echo $exit_code
echo $selection
*附录1 *
如果由于某种原因,必须将函数调用为$()并返回stdout中的结果,这是另一种可能性:
#!/bin/bash
#
function render_menu()
{
selection=$(dialog --clear --backtitle "$backtitle" --title "Some Title" --menu "My fancy menu" 50 15 4 "one" "option 1" "two" "option 2" 2>&1 1>&3)
exit_code=$?
echo $selection
}
exec 3>&1
selection="$(render_menu 2>&1 1>&3)"
exec 3>&-
echo $selection