将Xterm的输出重定向到日志文件

时间:2018-10-15 18:06:57

标签: bash centos centos7 xterm

我无法找到此问题的答案。 我在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窗口的输出,我可以看到其中包含数百行信息的弹出窗口。

2 个答案:

答案 0 :(得分: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的stdout和stderr发送到tmp/logs/p1.txt。)

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

答案 1 :(得分:0)

以下命令更改有效:

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

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