Linux 无错误时的标准错误文件

Linux 无错误时的标准错误文件,linux,Linux,我是Linux&shell新手,正在努力检查编译是否成功 g++ code.cpp -o code.o 2>error.txt if [ ! -e error.txt ] then do something else echo "Failed to compile" 我猜即使编译成功,也会创建一个错误文件。没有错误时,错误文件的内容是什么?我需要更改if条件以检查编译是否成功。这只是事情的顺序。shell解析字符串g++code.cpp-o code.o2>e

我是Linux&shell新手,正在努力检查编译是否成功

g++ code.cpp -o code.o 2>error.txt
if [ ! -e error.txt ]
then
  do something
else
  echo "Failed to compile"

我猜即使编译成功,也会创建一个错误文件。没有错误时,错误文件的内容是什么?我需要更改if条件以检查编译是否成功。

这只是事情的顺序。shell解析字符串
g++code.cpp-o code.o2>error.txt
时会发生什么情况:

g++ code.cpp -o code.o 2>error.txt
if [ ! -e error.txt ]
then
  do something
else
  echo "Failed to compile"
  • shell创建
    error.txt
    ,如果文件名已经存在,则截断该文件
  • 调用
    g++
    ,并将其错误输出重定向到新文件
  • 如果
    g++
    没有写入任何数据,则文件在步骤1结束时保持原样(空)

    您可能对错误文件不太感兴趣,而是对返回值感兴趣。你或许应该这样做:

    if g++ code.cpp -o code; then : do something; done
    
    甚至只是:

    g++ code .cpp -o code && : do something
    
    但是,如果您真的想对这些错误执行其他操作,您可以执行以下操作:

    if g++ code.cpp -o code.o 2> error.txt; then
        rm error.txt
        : do something
    else
        echo >&2 Failed to compile code.cpp.\  See "$(pwd)"/error.txt for details.
    fi
    

    确保在
    之后转义至少一个空格,以便在句点之后得到两个空格(或者只引用
    echo
    的整个参数)。尽管最近流行的说法是只需要一个空格,但所有这些论点都依赖于可变宽度字体的使用,任何值得使用的命令行工具都将在固定宽度字体仍然占主导地位的环境中最常使用。最后一点与您的问题完全无关,但值得记住。

    只需检查
    $?
    ..中的返回代码,谢谢您的回答。实际上,我只需要在编译成功后才需要做一些事情。由于您告诉我在这种情况下错误文件将为空,因此我使用了if[!-s error.txt],它成功了。谢谢@苏兹。不不要那样做。只要做
    如果g++…
    好的,我会做的:)