如何立即将标准错误传递给参数

时间:2014-09-15 16:25:08

标签: linux bash shell parameters

以下简单脚本将显示带有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

2 个答案:

答案 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"