以下简单脚本将显示带有3个问题的对话框GUI 并需要选择选项1/2/3
问题是我想将参数1/2/3存储在参数中而不是存储在文件中,然后我从文件中取出val
我想要的是立即将标准错误传递给参数
请建议如何将标准err(2>)设置为参数?
#!/bin/bash
dialog --backtitle "red-hat" --title "[ computers ]" \
--menu "Please choose an option:" 15 55 5 \
1 "erase disk" \
2 "clean disk" \
3 "break disk" 2>/temp
parameter=$(cat /temp )
我想要得到的是:
parameter=$( 2> ) .. something like this
答案 0 :(得分:2)
使用$()
和一些重定向:
parameter=$(dialog --backtitle "red-hat" --title "[ computers ]" \
--menu "Please choose an option:" 15 55 5 \
1 "erase disk" \
2 "clean disk" \
3 "break disk" 2>&1 >/dev/null)
请注意,订单很重要。 2>&1
重复fd 1到fd 2. >/dev/null
重定向fd 1,这样就不会在stdout上写入任何输出。
在这种情况下,对话框的标准输出仍然需要是tty才能显示给用户。我建议您按照this guide并使用以下重定向:
parameter=$(dialog --backtitle "red-hat" --title "[ computers ]" \
--menu "Please choose an option:" 15 55 5 \
1 "erase disk" \
2 "clean disk" \
3 "break disk" 2>&1 >/dev/tty)
答案 1 :(得分:0)
您可以使用process substitution
捕获子shell中变量的stderr:
ls *.exe 2> >(read -r err; echo "ERROR :: $err")
ERROR :: ls: cannot access *.exe: No such file or directory
或而不创建子shell :
read -u 2 -r err 2< <(dialog --backtitle "red-hat" --title "[ computers ]" \
--menu "Please choose an option:" 15 55 5 \
1 "erase disk" \
2 "clean disk" \
3 "break disk" 2>&1)
echo "ERROR :: $err"