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

时间:2017-04-10 08:09:52

标签: c++ linux shell

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

为什么?

2 个答案:

答案 0 :(得分:3)

两个问题:(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

答案 1 :(得分:1)

第一条错误消息表明没有以.o结尾的文件可以删除。

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

虽然第一个的原因很明显,但在这种情况下我不会期望第二条消息,除非编译器也输出编译错误消息:

虽然管道的使用,正如WhozCraig在他的评论中正确指出的那样,没有意义,但据我所知,g ++并没有读取要从stdin编译的文件,也没有编写目标文件到标准输出。

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

首次运行时,用分号替换管道符号,再次运行并发布您收到的完整输出。

你也可以使用&&在他建议的地方,但是如果不存在.o文件,我没有看到为什么不应该执行编译的充分理由。