linux bash 输出文件内容,在Linux上使用Bash将所有输出重定向到文件?

本问题已经有最佳答案,请猛点这里访问。

我试图将命令行程序的所有输出重定向到文件。我正在使用Bash。一些输出被定向到文件,但是一些仍然出现在终端中并且不存储到文件中。

这里描述了类似的症状:

将所有输出重定向到文件

但是我尝试了所提出的解决方案(捕获stderr)但没有成功:

 > stdout.txt 2> stderr.txt

文件stderr.txt已创建但为空。

可能的线索是命令行程序是与同一台机器上的服务器通信的客户端。可能有些输出来自服务器。

有没有办法捕获终端的所有输出,无论其来源如何?

编辑:

我已经确认缺少的输出是由服务器生成的。在单独的终端中运行命令会在两个终端中产生一些输出,我可以将命令终端的所有输出传输到文件。这引发了有关如何捕获服务器输出的问题,但这是一个不同的问题。

服务器如何在不通过客户端的情况下写入终端? 你能更具体地说明命令是什么吗? 你有什么应该工作正常。

如果程序直接写入例如 /dev/tty,而不是标准输出流之一,没有(简单)方法来捕获它。 还有可能是它可能将stdout / stderr文件描述符复制到另一个文件描述符并在那里写入,你可以捕获它(例如... 3> somefile),但你必须知道正在使用的文件描述符...

您可以使用此语法将所有输出stderr和stdout重定向到stdout.txt

 > allout.txt 2>&1

这种天真的方法只会捕获标准输入和标准输出。可能还有其他人。例如密码提示。因此,所选答案更正确。我不会低估你:)

我认为重要的是要补充一点,这与BASH中的I / O重定向的广泛主题有关

对于该解决方案,重定向的顺序也很重要。首先执行2>& 1似乎不起作用。

如果服务器是在同一个终端上启动的,那么它就是服务器的stderr,可能是写入终端并且你没有捕获它。

捕获所有内容的最佳方法是运行:

script output.txt

在启动服务器或客户端之前。这将启动一个新的shell,所有终端输出都重定向输出output.txt以及终端。然后从该新shell中启动服务器,然后启动客户端。您在屏幕上看到的所有内容(您的输入和从该shell中写入终端的所有内容的输出)都将写入该文件。

完成后,键入"exit"以退出由script命令运行的shell。

@yanbellavance通常,表明这种方式只是简单地支持您喜欢的答案。 Downvoting只能用于完全没有帮助的答案。此外,对于这个问题,linuxcdeveloper的答案(linuxcdeveloper是回答的人,Urda刚编辑了答案)实际上没有工作,因为Stefan的问题是输出来自两个不同的过程;使用"script"是捕获会话的所有输出的最佳方式,无论它来自哪个进程。

在这里,"脚本"是回答OP特定问题的最佳方式。它将从字面上捕捉一切!

虽然不是POSIX,但bash 4有&>运算符:

command &> alloutput.txt

完全不知道这个。最后一个简单的解决方案,不会仅重定向一个日志级别,而是全部!

您可以执行子shell并重定向所有输出,同时仍将进程放在后台:

( ./script.sh blah > ~/log/blah.log 2>&1 ) &

echo $! > ~/pids/blah.pid

我遇到了崩溃的程序麻烦*咳嗽PHP咳嗽*崩溃时它运行的shell报告了崩溃的原因,Segmentation fault (core dumped)

为了避免此输出未被记录,该命令可以在子shell中运行,该子shell将捕获并指示这些类型的输出:

sh -c 'your_command' > your_stdout.log 2> your_stderr.err

# or

sh -c 'your_command' > your_stdout.log 2>&1

大声笑,因为*cough PHP cough*而被提升

正确的答案在这里:http://scratching.psybermonkey.net/2011/02/ssh-how-to-pipe-output-from-local-to.html

your_command | ssh username@server"cat > filename.txt"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值