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

why this command fail? rm and g++ command?

本文关键字:命令 g++ rm 失败 为什么      更新时间:2023-10-16
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 文件的情况下不应该执行编译的充分理由。