为什么这个命令失败? rm和g ++命令?
问题描述:
rm *.o | g++ -c test.cpp | g++ test.o main.cpp
rm: cannot remove '*.o': No such file or directory
g++: error: test.o: No such file or directory
为什么呢?
答
两个问题:(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文件存在不应该进行编译一个很好的理由。
你确定那些'|'不应该是'&&'吗? – WhozCraig
可能是真的,但这不是原因,至少对于第一个错误消息... – user1934428