Bash标准错误重定向

时间:2013-04-13 09:31:40

标签: bash standard-error

我正在尝试验证用户输入的输入是数字类型还是非数字类型。如果是数字类型,那么它将执行必要的操作,否则它将生成我的设计的错误消息(而不是生成的标准错误)

我一直在使用的步骤是:

1>对输入执行数学运算 echo -n "Enter a number : "; read a

现在如果输入a是数字类型,那么操作成功,否则会产生标准错误。

Enter a number : ww

expr: non-numeric argument

我为了重定向标准错误而使用的代码是:

tmp=`expr $a / 1` >&2

我还尝试使用代码将其重定向到空文件:

tmp=`expr $a / 1` > /dev/null

但错误仍在显示中。

3 个答案:

答案 0 :(得分:4)

您必须在内部表达式中重定向stderr:

tmp=`expr $a / 1 2>/dev/null`

答案 1 :(得分:2)

输入正则表达式怎么样?

read a
if [[ $a =~ ^[0-9]+$ ]]
then
  echo this is a number
else
  echo not a number
fi
  • ^表示开始字符串
  • $表示字符串结尾
  • [0-9]+表示一个或多个出现的数字
  • =~是语法 Bash regular expression

答案 2 :(得分:2)

你的两个例子都重定向stdout,而不是stderr,因为 >之前没有限定符

要丢弃stderr,你需要2> /dev/null,因为它是文件描述符2.同样有用的是2>&1,将stderr合并到stdout,而&> file,简写来重定向stderr和stdout到同一个文件。

此页面解释得非常好:http://www.tldp.org/LDP/abs/html/io-redirection.html