【问题标题】:Redirect output of Xterm to log file将 Xterm 的输出重定向到日志文件
【发布时间】:2019-03-20 05:14:53
【问题描述】:

我无法找到这个问题的答案。 我在 xterm 中启动了三个用于演示自动化脚本的程序。我需要记录 xterm 窗口的结果。现在,我的脚本如下所示:

#!/bin/bash/sh

echo "NOTE - THIS PROCESS TAKES APPROXIMATELY 60 SECONDS TO RUN"

    cd ~/myProject/ProgramOne
    xterm -e ProgramOne progone.config 2>&1 /tmp/logs/p1.txt &

    cd ~/myProject/ProgramTwo
    xterm -e ProgramOne progtwo.config 2>&1 /tmp/logs/p2.txt &

    cd ~/myProject/ProgramThree
    xterm -e ProgramOne progthree.config 2>&1 /tmp/logs/p3.txt &


# allow the scripts to collect data
sleep 60

# kill the xterm sessions from running since this is just a demonstration
pkill -9 xterm

echo "******************************************"
echo "START PROGRAMS SCRIPT COMPLETE"
echo "******************************************"   

我已验证 ~/myProject/ProgramOne~/myProject/ProgramTwo~/myProject/ProgramThree 都存在,/tmp/logs/* 也是如此

文件被创建,它们只是没有任何内容,也不包含 xterm 窗口的输出,我可以看到包含数百行信息的弹出窗口。

【问题讨论】:

  • 无论如何我都看不出这条评论有什么建设性。
  • 这意味着您显示的脚本与您正在运行的脚本不同(除非您出于某种原因实际上在/bin/bash/sh 有一个shell)。如果我们在您的代码中看到错误,我们无法判断它们是您正在运行的代码中的错误还是转录错误。最好将实际运行的代码复制并粘贴到问题中。见minimal reproducible example
  • 这是我的代码,一行一行,它在我的系统上为我运行。
  • 你是如何调用它的?如果您以sh script_namebash script_name 运行它,那么#! 行将被忽略。如果你想在不指定使用哪个 shell 的情况下运行它,例如 ./script_name(这就是 #! 的全部意义),那么 #! 行是不正确的。 en.wikipedia.org/wiki/Shebang_(Unix)
  • 通过运行 ./script_name 与我目前的编写方式完美匹配。

标签: bash centos centos7 xterm


【解决方案1】:

xterm 不写入标准输出;相反,它会在其窗口中显示它调用的任何命令的输出。你需要重定向ProgramOne的输出,而不是xterm的输出。

当我最初写这个答案时我没有注意到:你的重定向不正确。您将 /tmp/logs/p1.txt 作为参数传递给 xterm2>&1 将 stderr 重定向到 stdout,但不采用文件名参数。 (是的,您可以将重定向与程序参数混合​​使用。例如,echo >hello.out hello 会将hello 写入hello.out

例如改变

xterm -e ProgramOne progone.config 2>&1 /tmp/logs/p1.txt &

xterm -e 'ProgramOne progone.config >/tmp/logs/p1.txt 2>&1' &

(我假设您想将ProgramOne 的标准输出和标准错误发送到tmp/logs/p1.txt。)

(您也可以使用-l 选项告诉xterm 将其输出记录到文件中,但这可能会被禁用,并且输出可能包含您可能不想要的格式字符。)

【讨论】:

  • 我刚刚尝试了这个解决方案。文件 p1.txt 为空,但 xterm 窗口的名称从 ProgramOne 更改为 p1.txt
  • -l 确实被禁用了:(
【解决方案2】:

命令中的以下更改有效:

xterm -e ProgramOne progone.config 2>&1 /tmp/logs/p1.txt &

xterm -e 'ProgramOne progone.config 2>&1 | tee /tmp/logs/p1.txt' &

【讨论】:

    猜你喜欢
    • 2016-10-07
    • 1970-01-01
    • 2013-04-15
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多