FLASK做wiki网站,网站开发需要哪些条件,墓地网站建设价格,wordpress 按钮支付要将stdout重定向到bash中的截断文件#xff0c;我知道要使用#xff1a;cmd file.txt要重定向bash中的stdout#xff0c;附加到一个文件#xff0c;我知道要使用#xff1a;cmd file.txt要将stdout和stderr重定向到截断的文件#xff0c;我知道要使用我知道要使用cmd file.txt要重定向bash中的stdout附加到一个文件我知道要使用cmd file.txt要将stdout和stderr重定向到截断的文件我知道要使用cmd file.txt如何重定向附加到文件的stdout和stderr埃多克斯一〔0〕没有为我工作。我要注意outfile是一个bash(和其他)特定的代码不可移植。可移植的方法(类似于附加答案)始终是并且仍然是outfile 21cmd file.txt 21bash执行从左到右的重定向如下所示file.txt在追加模式下打开file.txt重定向stdout。21将stderr改为stdout目前的发展方向。在本例中这是以追加模式打开的文件。换句话说1重用了stdout当前使用的文件描述符。工作很棒但是有没有一种方法可以解释这个问题或者我应该把它当作一个原子bash构造来处理这是一个简单的重定向重定向语句总是从左到右进行计算。文件红色。标准输出到文件(附加模式)(1文件的缩写)2amp1红色。stderr towhere stdout goes注意redirect stderr to stdout的解释是错误的。它表示将输出(stdout文件描述符1)附加到file.txt并将stderr(文件描述符2)发送到与fd1相同的位置。但是如果我需要将stderr重定向到另一个文件但要附加文件呢这有可能吗如果你这样做它应该达到你想要的。humthebonsai和其他用户的评论对我来说似乎很清楚但是来自cron-subject(…)-message:EDOCX1(每小时一次)。stderr是否排除segfault彭赛-我也在试图理解命令背后的原因。您以前的解释非常有用但是请您通过以下内容详细说明一下为什么cmdfile.log 2amp1将(通过附加)stderr重定向到stdout所在的位置而cmdfile.log 2amp1将(到截断的文件)stderr重定向到stderr所在的位置穆罕默德胡辛巴我你第一个使用21的机器不工作。这不是重定向而是复制文件描述符。因为您在附加模式下将stdout重定向到一个文件所以您要将该fd复制到stderr使其处于同一模型中。21是正确的。这不是抑制了stdin吗如何使用此选项保持程序的stdin活动例如如果我有一个Java程序可以读取用户输入它的STDUT和STD错误我想重定向到日志克里斯特这个命令根本不影响stdin。但是用户自然不会看到Java程序的输出因为它会转到一个文件而不是终端。如果你想两者兼得你需要使用tee。根据您的bash版本有两种方法可以做到这一点。经典的便携式(bash pre-4)方法是cmd outfile 21一个不可移植的方法从bash 4开始是cmd outfile(模拟 outfile)为了获得良好的编码风格您应该决定是否需要考虑可移植性(然后使用经典方法)决定是否需要考虑可移植性即使是bash pre-4(然后使用经典方法)无论使用哪种语法都不要在同一个脚本中更改它(混淆)如果您的脚本已经以#!/bin/sh开头(无论是否有意)那么bash 4解决方案以及通常任何bash特定的代码都不是解决方案。还要记住bash 4 只是较短的语法——它不引入任何新功能或类似的功能。这里描述的语法(除了其他重定向语法之外)http://bash hacker.org/wiki/doku.php/syntax/redientation appending_rediented_output_and_error_output我更喜欢amp因为它与amp和一致。将输出和错误附加到此文件比将错误发送到输出将输出附加到此文件更容易读取。注意虽然Linux通常具有bash的当前版本但在编写时OS X仍然需要通过自制等手动安装bash 4。我更喜欢它因为它较短每行只有两个位置所以zsh会用amp做什么同样需要注意的是在cron作业中即使系统有bash4也必须使用pre-4语法。zsero cron根本不使用bash…它使用sh。您可以通过将SHELL/bin/bash预先附加到crontab -e文件来更改默认shell。在bash中您还可以显式地指定重定向到不同的文件cmd log.out 2log_error.out附录将是cmd log.out 2log_error.out使用第一个选项将两个流重定向到同一个文件将导致第一个流在第二个流的顶部写入覆盖部分或全部内容。使用cmdlog.out 2log.out代替。谢谢你接住了你说得对一个会打倒另一个。但是您的命令也不起作用。我认为写入同一个文件的唯一方法是像在cmd log.out 21之前那样。我正在编辑我的答案以删除第一个示例。在bash 4(以及zsh 4.3.11)中cmd outfile刚出盒Aoeaoe这实际上也适用于bash4。所有这是一个很好的答案因为它与bash一起工作并且很简短所以我已经编辑了以确保它明确地提到bash。Mikemacana:Thebonsai的答案显示了自2009年以来的bash4解决方案这应该很有效your_command 21 | tee -a file.txt它将所有日志存储在file.txt中并将其转储到终端上。试试这个You_command 1output.log 21您对ampx.file的使用确实适用于bash4。对不起(这里有一些额外的提示。0、1、2…9是bash中的文件描述符。0代表stdin1代表stdout2代表stderror。3~9备用用于其他临时用途。任何文件描述符都可以使用操作符或重定向到其他文件描述符或文件。用途请参考http://www.tldp.org/ldp/abs/html/io-redirection.html您的示例将执行与OP要求不同的操作它将把You_command的stderr重定向到stdout将You_command的stdout重定向到output.log文件。此外它不会附加到文件但会覆盖该文件。正确对于所有其他文件文件描述符可以是大于3的任何值。您的答案显示了最常见的输出重定向错误将stderr重定向到stdout当前指向的位置并且仅在将stdout重定向到文件之后。这不会导致stderr重定向到同一文件。重定向的顺序很重要。这是否意味着我应该首先将stderror重定向到stdout然后将stdout重定向到文件。1 output.log 21昆图斯。周是的。您的版本将err重定向到out同时将out重定向到file。我很惊讶近十年来还没有人发布这种方法如果在没有的情况下使用较旧版本的bash您还可以执行以下操作(cmd 21) file.txt这产生了一个子外壳因此它的效率比传统的cmd file.txt 21方法低但我觉得这种方法更自然更容易理解将stderr重定向到stdout。通过附加到文件来重定向新的stdout。此外圆括号还消除了顺序的任何模糊性特别是如果您希望将stdout和stderr管道传输到另一个命令。好啊。4年后你得到了认可。这就是艺术的本质在得到认可之前你有时间去死o)