要将stdout和stderr重定向(并附加)到文件中,同时还在终端上显示它,我这样做:
command 2>&1 | tee -a file.txt
Run Code Online (Sandbox Code Playgroud)
但是,有没有其他方法可以做到这一点,以便我获得退出状态的准确值?
也就是说,如果我测试$?,我想看到退出状态command,而不是退出状态tee.
我知道我可以${PIPESTATUS[0]}在这里使用而不是$?,但我正在寻找另一种不需要检查的解决方案PIPESTATUS.
我正在运行CMake(3.4.3),如CMake FAQ中所述:
export CC="cc_args.py $PWD/../bin/gcc"
export CXX="cc_args.py $PWD/../bin/g++"
cmake -DCMAKE_BUILD_TYPE=Debug ..
Run Code Online (Sandbox Code Playgroud)
然而,当我打印CMAKE_CXX_COMPILER和CMAKE_C_COMPILER它仍然指向在系统默认的编译器/usr/bin.它只有在我明确读入这样的环境变量时才有效:
IF (NOT $ENV{CC} STREQUAL "")
SET(CMAKE_C_COMPILER $ENV{CC})
ENDIF ()
IF (NOT $ENV{CXX} STREQUAL "")
SET(CMAKE_CXX_COMPILER $ENV{CXX})
ENDIF ()
Run Code Online (Sandbox Code Playgroud)
但即使这样,建筑也会因此消息失败:
/bin/sh: 1: /home/peterg/bin/cc_args.py /home/peterg/Code/build/../bin/g++: not found
Run Code Online (Sandbox Code Playgroud)
但是我确信所有路径都是正确的,因为只执行两个冒号之间的路径按预期输出:
g++: fatal error: no input files
compilation terminated.
Run Code Online (Sandbox Code Playgroud)
似乎编译过程不喜欢编译器路径中的空格.我现在创建了两个脚本(一个用于GCC,一个用于CC),它们包装命令并传播参数,这似乎有效.但似乎我仍然在做一些根本性的错误,因为CMake本身也不会接受导出的变量CC=proxy_script_cc.sh和GCC=proxy_script_gcc.sh没有空格的变量.
GCCFilter是一个简洁的perl脚本,可以为GCC的输出着色,从而使调试更有趣,更重要的是,更快.
您可以通过调用将GCCFilter与CMake生成的Makefile一起使用
gccfilter -a -c make
Run Code Online (Sandbox Code Playgroud)
但是,这种方法有一些缺点:CMake状态信息的延迟输出,CMake命令中没有颜色是最明显的.
问题:是否有写一些CMake的模块,搜索的方式gccfilter,如果编译器是gcc,如果检查,说COLOR_CXX是设置(相当容易了这里),然后告诉CMake的,以取代所有调用gcc的gccfilter -a -c gcc.
CMake提供变量CMAKE_CXX_COMPILER,但更改此变量将禁止CMake找到正确的包含路径等.是否有一些变量我们可能会project()在每次调用之前的前缀命令后更改gcc?
我可以告诉 CMake 通过外部程序通过管道传输来自编译器和/或链接器的所有 stderr 输出,并在终端上显示其输出吗?
因此,我是整个Bash脚本编制领域的新手,但是我正在开发一个脚本,用于编译目录中的所有.c文件,并通过以下操作成功完成了该操作:
for F in *.c; do
gcc -c -Wall -o ${F%.c} $F
done
Run Code Online (Sandbox Code Playgroud)
一切正常,但我希望输出看起来像:
ex1.c Errors
ex2.c OK
ex3.c Warnings
Run Code Online (Sandbox Code Playgroud)
因此,基本上我想对“ Ok”设置退出状态为0(一切正常),对“ Warnings”设置退出状态为1(警告,但没有错误),对“ Errors”设置退出状态2(未编译)。
我很难弄清楚该怎么做。我到处搜寻,找不到任何有用的资讯。我完全可以忽略一些东西。
编辑:无论如何都会说:如果gcc -Wall file.c有错误,则只说Error而不是完整的GCC错误处理消息?与警告相同并且可以完美编译吗?