脚本错误退出格式

脚本错误退出格式

我看了一本书上有提到,如脚本错误退出,一个一个好习惯是显示脚本名并将之定向到标准错误中:
如: echo " basename $0: erro could not " >&2
或者 > /dev/null  2 >&1

我有两个问题:
1。 basename $0: 是打印出当前脚本的名字,但是我执行后,basename 也显示出来了,不知道哪里不对
2。 把错误输出到 > /dev/null  就足够了,为什么还要2 >&1?有的脚本例子echo " basename $0: erro could not " >&2 ,输出到>&2 ,有些糊涂。。。
希望各为前辈指教!!      
1) 你的用法不对, 估计是看书不认真所致 应该这样写: echo "$(basename $0) ..." 或者 echo "`basename $0` ..."

2) > /dev/null 是把 STDOUT 定向至 /dev/null, 而 2>&1 是说把 STDERR 也写到 STDOUT 中去, 合起来 > /devnull 2>&1 的效果就是把 STDOUT 跟 STDERR 都定向到 /dev/null      
1)我写到这里忘记写上‘ ‘,但是我的确echo "` $0` ..." 就是显示出了basename 和当前脚本名字?
2)感谢你的解释,明白了,能否解释下echo " ‘basename $0’: erro could not " >&2,如写上echo " ‘basename $0’: erro could not " >/dev/null  2>&1 是一样的么?      
1) 未经验证的 script 尽量不要贴上来, 贴出来的 script 要尽量保证其正确性 (主要指拼写好语法), 否则可能生出许多误会出来

2) echo 默认是输出到 STDOUT 的, 因为要打印的是 error message, 因此用 >&2 强制把 STDOUT 的内容输出到 STDERR

      
引用:
原帖由 skyblue1 于 2008-10-24 16:08 发表
1)我写到这里忘记写上‘ ‘,但是我的确echo "` $0` ..." 就是显示出了basename 和当前脚本名字?
2)感谢你的解释,明白了,能否解释下echo " ‘basename $0’: erro could not " >&2,如写上echo " ‘basename $ ...
哦,的确没仔细分析:(, >&2知识把标准错误输出到一个文件中,但是echo " ‘basename $0’ “为什么要显示BASENAME呢?用$(basename $0)是对的      
引用:
原帖由 dearvoid 于 2008-10-24 16:15 发表
1) 未经验证的 script 尽量不要贴上来, 贴出来的 script 要尽量保证其正确性, 否则可能生出许多误会出来


2) echo 默认是输出到 STDOUT 的, 因为要打印的是 error message, 因此用 >&2 强制把 STDOUT 的内容输出 ...
接受你的批评,下次我会注意些!!!谢谢!!      
引用:
原帖由 skyblue1 于 2008-10-24 16:19 发表 但是echo " ‘basename $0’ “为什么要显示BASENAME呢?用$(basename $0)是对的
还是没有看仔细, 里面用的不是单引号 ' 而是 ` (键盘上数字 1 左边那哥们儿)      
引用:
原帖由 dearvoid 于 2008-10-24 16:23 发表

还是没有看仔细, 里面用的不是单引号 ' 而是 ` (键盘上数字 1 左边那哥们儿)
是的 汗。。。。谢过。。。