1
013231 2013-07-28 01:50:00 +08:00 1
你的理解是錯誤的. 重定向只是決定輸出到什麼地方, 並不會把失敗的命令變成成功的. 在這個例子中, 重定向不影響返回值.
|
2
sophy 2013-07-28 01:57:03 +08:00 via iPad 1
能通就是1反之就是0
|
3
sdzbzyc OP @013231
感谢回复 是不是可以这样理解,ping -c 1 -w 1 ${network}.${sitenu} &> /dell/null 是0还是1取决于能不能ping通,而与&> /dell/null重定向没有关系。 |
5
xdays 2013-07-28 10:32:18 +08:00
动手验证下呗
echo -e "aa\nbb" > /tmp/foo.txt; grep cc /tmp/foo.txt >/dev/null && echo 0 || echo 1; grep aa /tmp/foo.txt>/dev/null && echo 0 || echo 1 |
6
013231 2013-07-28 10:36:15 +08:00
@sdzbzyc 是的. `echo $?`可以看到上一個命令的返回值, 你試試就知道了.
axios@gentoo ~ $ ping notExist ping: unknown host notExist axios@gentoo ~ $ echo $? 2 axios@gentoo ~ $ ping notExist &> /dev/null axios@gentoo ~ $ echo $? 2 由此可見, 雖然第二次ping通過重定向把錯誤信息影藏起來了, 但並不影像返回值. |
7
013231 2013-07-28 10:42:34 +08:00
s/影像/影響/
|
8
LazyZhu 2013-07-28 11:06:28 +08:00 1
|
9
013231 2013-07-28 11:37:11 +08:00 1
@LazyZhu 這裏還要再補充一下, 對於絕大部分編程語言, 0為假, 非零為真; 但對於bash正好相反, 0(執行成功)為真, 非零(執行失敗)為假.
|
10
darasion 2013-07-28 11:59:34 +08:00 1
命令或程序的返回值,是程序运行完毕或退出时放在寄存器里返回给内核的状态,跟重定向没关系,也没办法重定向。shell做布尔判断的就是这个东西。
能重定向的是:标准输入,标注输出,标准错误,它们都是文件描述符,是进程打开的文件(屏幕中断也是设备文件)的代号。 大概是这个意思吧。 |