【问题标题】:Linux All Output to a FileLinux 所有输出到文件
【发布时间】:2014-04-08 19:26:39
【问题描述】:

有没有办法告诉 Linux 系统把所有的输出(stdout,stderr)放到一个文件中? 不使用重定向、管道或修改脚本的调用方式。

只需告诉 Linux 使用文件进行输出即可。

例如: 脚本 test1.sh:

#!/bin/bash
echo "Testing 123 "

如果我像“./test1.sh”一样运行它(没有重定向或管道) 我想在文件(/tmp/linux_output)中看到“Testing 123”

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

【问题讨论】:

    标签: linux pipe stdout stderr io-redirection


    【解决方案1】:
    #!/bin/bash
    exec >file 2>&1
    echo "Testing 123 "
    

    你可以阅读更多关于exechere的信息

    【讨论】:

    • 这是修改脚本的必要条件。无论运行什么脚本或应用程序,我都在寻找文件而不是控制台屏幕
    • @FCa,不,这不需要修改脚本,因为您可以在 intermediate 脚本中执行此操作。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        如果从字面上理解,您的要求是不切实际的,因为它是基于轻微的误解。从根本上说,要将输出放入文件中,您必须更改某些内容 以将其定向到那里 - 这将违反您的文字约束。

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

        所以,例如:

        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
        

        当然,如果你真的不喜欢这个,你总是可以修改内核 - 但同样,这会改变一些东西(也是一个非常笨拙的解决方案)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-05-26
          • 1970-01-01
          • 1970-01-01
          • 2023-04-11
          • 2017-06-21
          • 1970-01-01
          • 2021-10-31
          相关资源
          最近更新 更多