我需要将编译的所有输出保存到文件中。我有很多错误undefined reference
,我想看到所有这些错误。我尝试了makeall >& out
,但文件中out
没有任何错误undefined reference
。
我必须使用csh
来运行makeall
.
答案1
你有没有尝试过makeall |& tee out
?这仍然应该打印屏幕上以及文件中的所有内容out
。
答案2
从您的评论来看,明显的解决方案似乎不起作用。请您尝试一下sh -c 'makeall >out 2>&1'
(您可能需要修改该makeall
部分以包含完整路径,或附加各种标志;只需确保它全部位于单引号内)。
如果它产生错误,请在此处提供。
如果没有错误,但你仍然没有在输出文件中得到编译错误,那么你的makeall
脚本几乎肯定会做一些非常奇怪的事情标准输出和标准错误文件描述符。
答案3
如果您的makeall
脚本本身将 stderr 重定向到终端设备或/dev/tty
,那么再多的重定向makeall
stderr 也无济于事。
由于与类似 Bourne 或类似 rc 的 shell 相比,csh 中的重定向支持非常有限,因此经常会看到以下内容:
cmd >& /dev/null > /dev/tty
仅重定向 stderr(同时重定向stdout
到 tty,假设它是之前的样子)。
或者:
(cmd1; cmd2 >& /dev/tty; cmd3) >& file.log
免于cmd2
重定向到日志文件。
现在,由于重定向是明确指向的/dev/tty
,我们唯一的选择就是将其/dev/tty
转到您的out
文件中。
为此,您可以使用伪终端,将其作为makeall
命令的标准输出和标准错误。
为此,您可以使用script
.util-linux
至少来自以下实施:
script -qec 'stty raw -echo; exec makeall' out >& /dev/null
将 替换>& /dev/null
为< /dev/null
(以避免script
将主机终端也置于原始模式)以查看输出+错误(除了记录在文件中之外out
)。