为什么这个命令失败? rm和g ++命令?

问题描述:

rm *.o | g++ -c test.cpp | g++ test.o main.cpp 

结果:为什么这个命令失败? rm和g ++命令?

rm: cannot remove '*.o': No such file or directory 
g++: error: test.o: No such file or directory 

为什么呢?

+2

你确定那些'|'不应该是'&&'吗? – WhozCraig

+1

可能是真的,但这不是原因,至少对于第一个错误消息... – user1934428

两个问题:(a)您可能没有任何.o文件要删除,并且(b)您不恰当地使用管道。请尝试:

rm *.o &> /dev/null ; g++ -c test.cpp && g++ test.o main.cpp 
     ^^^^^^^^^^^^^^     ^^ 
     ignore any error    only try to link if 
     message and     compile is successful 
     continue regardless 

第一个错误消息说,没有以.o结尾的文件可以删除。

第二条消息说g ++没有找到要处理的文件test.o。

虽然对于第一个原因是显而易见的,我也不会预期在这种情况下,第二消息,除非该编译器也将输出编译错误信息:

虽然管的使用,如WhozCraig正确在他的评论中指出,没有任何意义,据我所知,g ++不会读取要从stdin编译的文件,也不会将目标文件写入stdout。

因此,要么编译文件(尽管事实上g ++命令放在管道中),或者您应该收到有关编译错误或有关缺少输入文件的其他错误消息。

对于第一次运行,请用分号替换管道符号,再次运行并张贴完整的输出。

你也可以使用& &这里他建议,但我不明白为什么,如果没有的.o文件存在不应该进行编译一个很好的理由。