【问题标题】:log ALL output of console记录控制台的所有输出
【发布时间】:2017-10-05 13:08:48
【问题描述】:

我正在尝试在控制台中记录一些内容,但它不起作用。输出是:

Resolving...
+ /keyboard
+ /keyboard/windows.keylayout
+ /keyboard/hardware.txt
Addition count 3 src: 60.42KB
 61868 / 61868 [====================================================] 100.00% 0s

我希望将其写入 .log 文件。

但它只需要“解决...”,当我执行"script >> script.log" 作为 first 行时,我想这是因为“+”,我该如何解决它,它会将所有输出记录到该文件中吗?

cd /home/andre/test/ && /usr/local/bin/drive_armv7 pull -no-prompt keyboard 2>&1 >> error.log

谢谢。

【问题讨论】:

标签: linux bash shell unix logging


【解决方案1】:

分配顺序?

cd /home/andre/test/ && /usr/local/bin/drive_armv7 pull -no-prompt keyboard 2>&1 >> error.log

告诉stderr去stdout要去的地方,也就是终端。然后你告诉标准输出进入日志。切换它们 -

cd /home/andre/test/ &&
/usr/local/bin/drive_armv7 pull -no-prompt keyboard >> error.log 2>&1  

这告诉 stdout 进入日志,然后告诉 stderr 进入 stdout 所在的位置……现在是日志。

【讨论】:

  • andre@raspberrypi:~/test $ cat error.log Resolving... andre@raspberrypi:~/test $ 同样的问题,那不是问题...
  • 需要看实际执行。我假设您在循环中的某个地方使用set -x 来获取那些领先的加号?我们能看到一些代码,或者至少是结构上相同的东西吗?
【解决方案2】:

可能是您正在运行一个名为脚本的默认程序

user@apollo:~$ script test
Script started, file is test

user@apollo:~$ which script
/usr/bin/script

如果“script”是一个名为“script.sh”的本地可执行文件,你应该如下运行它

./script.sh

尝试重现您的问题不会产生意外的输出

cat > script.sh <<EOF
echo "Resolving..."
echo "+ /keyboard"
echo "+ /keyboard/windows.keylayout"
echo "+ /keyboard/hardware.txt"
echo "Addition count 3 src: 60.42KB"
echo "61868 / 61868 [====================================================] 100.00% 0s"
EOF
chmod +x script.sh
./script.sh >> script.log
cat script.log

意外行为取决于您的脚本试图做什么

【讨论】:

  • 脚本是否可能以某种方式在其中执行 EOF,因此它停止写入日志文件?如果是,我可以做些什么来忽略它并简单地跟踪终端的输出?
  • 此外,当我为此使用 cronjob 时,它也只是在邮件中告诉我“正在解决...”,结果我得到...那可能是什么问题?
  • EOF 只是一个 Bash Here 文档示例。如果您使用脚本的内容编辑原始问题,则更容易帮助您调试:)
猜你喜欢
  • 1970-01-01
  • 2019-07-25
  • 1970-01-01
  • 1970-01-01
  • 2015-07-23
  • 1970-01-01
  • 2017-01-18
  • 2019-05-01
  • 1970-01-01
相关资源
最近更新 更多