将 Xterm 的输出重定向到日志文件
Redirect output of Xterm to log file
我没能找到这个问题的答案。
我在 xterm 中启动了三个程序,用于演示自动化脚本。我需要记录 xterm windows 的结果。现在,我的脚本如下所示:
#!/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 windows 的输出,我可以看到弹出窗口有数百行信息。
xterm
不写入标准输出;相反,它显示它在 window 中调用的任何命令的输出。您需要重定向 ProgramOne
的输出,而不是 xterm
.
的输出
还有一件事我在最初写这个答案时没有注意到:您的重定向不正确。您将 /tmp/logs/p1.txt
作为参数传递给 xterm
。 2>&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
将其输出记录到一个文件中,但该选项可能被禁用并且输出可能包含您可能不了解的格式化字符想要。)
命令中的以下更改有效:
xterm -e ProgramOne progone.config 2>&1 /tmp/logs/p1.txt &
至
xterm -e 'ProgramOne progone.config 2>&1 | tee /tmp/logs/p1.txt' &
我没能找到这个问题的答案。 我在 xterm 中启动了三个程序,用于演示自动化脚本。我需要记录 xterm windows 的结果。现在,我的脚本如下所示:
#!/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 windows 的输出,我可以看到弹出窗口有数百行信息。
xterm
不写入标准输出;相反,它显示它在 window 中调用的任何命令的输出。您需要重定向 ProgramOne
的输出,而不是 xterm
.
还有一件事我在最初写这个答案时没有注意到:您的重定向不正确。您将 /tmp/logs/p1.txt
作为参数传递给 xterm
。 2>&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
将其输出记录到一个文件中,但该选项可能被禁用并且输出可能包含您可能不了解的格式化字符想要。)
命令中的以下更改有效:
xterm -e ProgramOne progone.config 2>&1 /tmp/logs/p1.txt &
至
xterm -e 'ProgramOne progone.config 2>&1 | tee /tmp/logs/p1.txt' &