Linux的所有输出到文件

有什么办法告诉Linux系统把所有的输出(stdoutstderr)放到一个文件中? 无需使用redirect,pipe道或修改如何调用脚本。

只要告诉Linux使用一个文件输出。

例如:脚本test1.sh:

#!/bin/bash echo "Testing 123 " 

如果我运行它像“./test1.sh”(与redirect或pipe道),我想看到一个文件(/ tmp / linux_output)中的“testing123”

问题:在系统中,一个二进制文件调用了一个脚本,这个脚本调用了许多其他的脚本。 这是不可能的,所以如果我可以修改Linux把“输出”到一个文件我可以检查日志。

 #!/bin/bash exec >file 2>&1 echo "Testing 123 " 

你可以在这里阅读更多关于exec 信息

如果从终端运行程序,则可以使用命令脚本。 它会打开一个子shell。 做你需要做的事情。 它会将所有的输出复制到一个文件中。 完成后,退出shell。 ^ D,或退出。 这不使用重定向或管道。

您可以将终端的回滚缓冲区设置为大量行,然后在缓冲区中查看命令的所有输出 – 根据您的终端窗口和菜单中的选项,可能有一个选项用于捕获终端I / O到一个文件。

如果从字面上理解你的要求是不切实际的,因为它是基于一个小小的误解。 从根本上说,为了得到输出到一个文件中,你将不得不改变一些东西来引导它 – 这将违反你的文字约束。

但是实际问题是可以解决的,因为除非在孩子中明确地抵消,否则在父进程中配置的输出方向将被继承 。 所以你只需要设置重定向一次,使用一个外壳,或者一个自定义的启动程序或中介。 之后它将被继承。

所以,例如:

cat > test.sh

 #/bin/sh echo "hello on stdout" rm nosuchfile ./test2.sh 

还有一个子脚本来调用

cat > test2.sh

 #/bin/sh echo "hello on stdout from script 2" rm thisfileisnteither ./nonexistantscript.sh 

运行第一个重定向stdout和stderr的脚本(bash版本 – 你可以用很多方式来完成这个任务,比如编写一个重定向它的输出的C程序,然后exec()是你真正的程序)

./test.sh &> logfile

现在检查该文件,并查看来自父级和子级的 stdout和stderr的结果。

cat logfile

 hello on stdout rm: nosuchfile: No such file or directory hello on stdout from script 2 rm: thisfileisnteither: No such file or directory ./test2.sh: line 4: ./nonexistantscript.sh: No such file or directory 

当然,如果你真的不喜欢这样的话,你可以随时修改内核,但是这又改变了一些东西 (也是一个非常不好的解决方案)。