我试图单线运行以下命令以查看ac程序的输出:
$ gcc -o hi.o hi.c && ./hi.o && echo $?
但是,这不会“返回”或打印任何内容。而且echo $?
只有我在新行中执行此操作才可以。例如:
$ gcc -o hi.o hi.c && ./hi.o
$ echo $?
21 # correct program output
为什么会发生这种现象?会发生什么后./hi.o
说(好像)禁止输出后呢?
以前的命令之一可能失败了(退出代码非零)。&&
就像大多数程序语言一样工作,它会短路。因此,如果我编写true && false && true
该true
命令,则最后一条命令将永远不会运行,因为该false
命令返回了不成功的退出代码。
(也有||
相反的情况:只有在左侧发生故障时,它才会在右侧运行。)
根据您的问题,./hi.o
返回的退出代码21非零,因此被视为失败echo $?
且未执行。
要无条件地链接命令,请;
改用:
gcc -o hi.o hi.c; ./hi.o; echo $?
您还可以使它像以前一样hi.o
仅在gcc
成功后才能运行,但是无论如何都可以运行echo
:
gcc -o hi.o hi.c && ./hi.o; echo $?
(此方法没有括号,因为;
它的优先级低于&&
。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句