CSH 和所有输出(有错误)到文件

CSH 和所有输出(有错误)到文件

我需要将编译的所有输出保存到文件中。我有很多错误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,那么再多的重定向makeallstderr 也无济于事。

由于与类似 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)。

相关内容