为什么删除“2>”中的“2”会导致 "No such file or directory" 错误
Why does removing the "2" in "2>" cause a "No such file or directory" error
#!/bin/sh
if [ $# -lt 1 ]
then echo "error: provide an argument"
exit 1
fi
temp=$(mktemp 2> /dev/null)
wget -o /dev/null -O "$temp" "" || { echo "0"; exit 1;}
wc -c < "$temp"
exit 0
当我删除“2>”中的 2 时出现错误,但我想了解为什么会出现这种情况。为什么需要 2?
2>file
表示“将写入文件描述符 2
的内容重定向到文件 file
”。文件描述符 2 是“标准错误”,程序向其写入错误消息的描述符。 2>/dev/null
因此使错误消息静音。
>file
是 1>file
的缩写。它的意思是“将写入文件描述符 1
的内容重定向到文件 file
”。文件描述符 1 是“标准输出”,程序向其写入信息消息的描述符。 >/dev/null
因此使信息性消息静音。
mktemp
将错误消息写入标准错误。 2>/dev/null
消除错误消息。
mktemp
将生成的文件名写入标准输出。 >/dev/null
沉默。 (这使得对 mktemp
的调用相当无用!)
例如,
$ alias hello='perl -e'\''print STDOUT "Hello\n"; print STDERR "World\n";'\'''
$ hello
Hello
World
$ hello 2>/dev/null
Hello
$ hello >/dev/null
World
您可能想要更换
temp=$( mktemp 2>/dev/null )
和
temp=$( mktemp ) || exit 1
使用有用的消息失败,而不是将错误数据传递给 wget
(这将导致它失败)。
#!/bin/sh
if [ $# -lt 1 ]
then echo "error: provide an argument"
exit 1
fi
temp=$(mktemp 2> /dev/null)
wget -o /dev/null -O "$temp" "" || { echo "0"; exit 1;}
wc -c < "$temp"
exit 0
当我删除“2>”中的 2 时出现错误,但我想了解为什么会出现这种情况。为什么需要 2?
2>file
表示“将写入文件描述符 2
的内容重定向到文件 file
”。文件描述符 2 是“标准错误”,程序向其写入错误消息的描述符。 2>/dev/null
因此使错误消息静音。
>file
是 1>file
的缩写。它的意思是“将写入文件描述符 1
的内容重定向到文件 file
”。文件描述符 1 是“标准输出”,程序向其写入信息消息的描述符。 >/dev/null
因此使信息性消息静音。
mktemp
将错误消息写入标准错误。 2>/dev/null
消除错误消息。
mktemp
将生成的文件名写入标准输出。 >/dev/null
沉默。 (这使得对 mktemp
的调用相当无用!)
例如,
$ alias hello='perl -e'\''print STDOUT "Hello\n"; print STDERR "World\n";'\'''
$ hello
Hello
World
$ hello 2>/dev/null
Hello
$ hello >/dev/null
World
您可能想要更换
temp=$( mktemp 2>/dev/null )
和
temp=$( mktemp ) || exit 1
使用有用的消息失败,而不是将错误数据传递给 wget
(这将导致它失败)。