Linux(Bash):将所有输出redirect到文件
我正在尝试将命令行程序的所有输出redirect到一个文件。 我正在使用Bash。 一些输出被定向到文件,但是一些仍然出现在terminal中并且不被存储到文件中。
类似的症状在这里描述:
将所有输出redirect到文件
不过,我已经尝试了build议的解决scheme(捕获stderr)没有成功:
<cmd> <args> > stdout.txt 2> stderr.txt
文件stderr.txt被创build,但是是空的。
一个可能的线索是命令行程序是与同一台机器上的服务器通信的客户端。 这可能是一些输出来自服务器 。
有没有办法从terminal捕获所有输出,而不pipe它的来源?
编辑:
我已经确认缺less的输出是由服务器生成的。 在单独的terminal中运行命令会在两个terminal中产生一些输出,我可以将命令terminal的所有输出传送到文件。 这引发了关于如何捕获服务器输出的问题,但这是一个不同的问题。
如果服务器是在同一个terminal上启动的,那么服务器的stderr可能正在被写入terminal,而您并没有捕获到这个stderr。
捕捉一切的最好方法是运行:
script output.txt
在启动服务器或客户端之前。 这将启动一个新的shell与所有terminal输出redirectoutput.txt以及terminal。 然后从新的shell中,然后从客户端启动服务器。 您在屏幕上看到的所有内容(包括input内容和从shell写入terminal的所有内容)都将写入文件。
完成后,input“exit”退出由script
命令运行的shell。
您可以使用此语法将所有输出stderr和stdoutredirect到stdout.txt
<cmd> <args> > allout.txt 2>&1
虽然不是POSIX,但是bash 4有&>
运算符:
command &> alloutput.txt
您可以执行一个子shell并redirect所有输出,同时仍然将进程置于后台:
( ./script.sh blah > ~/log/blah.log 2>&1 ) & echo $! > ~/pids/blah.pid
正确的答案在这里: http : //scratching.psybermonkey.net/2011/02/ssh-how-to-pipe-output-from-local-to.html
your_command | ssh username@server "cat > filename.txt"
我遇到了一个崩溃的程序的麻烦* 咳嗽 PHP 咳嗽 *崩溃后,它运行的shell报告崩溃的原因, Segmentation fault (core dumped)
为了避免这个输出没有被logging下来,这个命令可以在一个子shell中运行,这个子shell将捕获和指导这些types的输出:
sh -c 'your_command' > your_stdout.log 2> your_stderr.err # or sh -c 'your_command' > your_stdout.log 2>&1