RHEL 8.1中ls命令重定向标准输出及使用-l参数时返回码异常变化的原因咨询
RHEL 8.1中ls命令重定向标准输出及使用-l参数时返回码异常变化的原因咨询
各位大佬,最近碰到个折腾了我大半天的奇怪问题,想请教下大家这到底是怎么回事😅
先给大家看我一步步测试的过程:
首先我执行了这个命令,能看到ls明明报错找不到/mnt/pid_oper/Trans,但最后返回码是1:
$ ls /mnt/pid_oper/ ; echo $? ls: cannot access '/mnt/pid_oper/Trans': No such file or directory Trans 1
然后我把标准输出重定向到/dev/null后,神奇的事情发生了——返回码变成0了:
$ ls /mnt/pid_oper/ > /dev/null; echo $? 0
一开始我以为是重定向操作改变了命令的返回码?但我马上做了个验证测试,发现并不是这么回事:
$ $(exit 138) ; echo $? 138 $ $(exit 138) > /dev/null; echo $? 138
那问题就出在ls本身了?更诡异的还在后面,当我给ls加上-l参数后,重定向输出的返回码又变回1了:
$ ls /mnt/pid_oper/ > /dev/null; echo $? 0 $ ls -l /mnt/pid_oper/ > /dev/null; echo $? ls: cannot access '/mnt/pid_oper/Trans': No such file or directory 1
补充下背景:这个/mnt/pid_oper/目录下的Trans是一个挂载异常的文件,直接用ls查看会显示成d?????????? ? ? ? ? ? Trans这种状态,我本来是想用ls的返回码来检测挂载是否卡住的,结果就碰到了这个离谱的情况。
有没有大佬能解释下这背后的原因呀?
备注:内容来源于stack exchange,提问作者user1099277
相关产品推荐
相关产品推荐

