Questions tagged «stderr»

标准错误是程序通常用于输出错误消息或诊断的另一种输出流。

5
进度报告/记录信息是否属于stderr或stdout?
是否有正式的POSIX,GNU或其他指南,说明应在何处打印进度报告和日志记录信息(如“ Doing foo; foo done”之类的内容)?就个人而言,我倾向于将它们写入stderr,以便可以重定向stdout并仅获取程序的实际输出。最近有人告诉我,这不是一个好习惯,因为进度报告实际上不是错误,而应该仅将错误消息打印到stderr。 这两个职位都很有意义,当然您可以根据自己的工作细节选择一个或两个,但是我想知道是否有一个普遍接受的标准。在POSIX,GNU编码标准或任何其他这样的最佳实践列表中,我找不到任何特定的规则。 我们有一些类似的问题,但它们不能解决这个确切的问题: 何时在shell脚本中使用重定向到stderr:接受的答案表明了我倾向于做的事情,将程序的最终输出保留在stdout上,并保留给stderr。但是,尽管有论点支持,但这只是作为用户的意见而呈现的。 使用消息应该发送到stderr还是stdout?:这特定于帮助消息,但引用了GNU编码标准。这是我正在寻找的东西,不仅限于帮助消息。 那么,是否有关于打印进度报告和其他信息(不在程序实际输出中的部分)的官方规定?
75 posix  stdout  gnu  stderr  standard 


2
在bash脚本中抑制stderr消息
考虑以下(略微愚蠢的)脚本名称“ test1.sh”: #/bin/bash # sleep 10 & echo sleep pid = $! pkill sleep 运行它时,不仅得到回声的输出,而且还得到bash关于stderr睡眠死亡的报告: $ ./test1.sh sleep pid = 3551 ./test1.sh: line 5: 3551 Terminated sleep 10 在这种情况下,我想将打印输出抑制为stderr。我知道我可以在命令行中做到这一点,如下所示: $ ./test1.sh 2> /dev/null ......但有没有办法从抑制其内的脚本?(我知道我可以将其包装在第二个脚本中,并让包装器将其重定向,但是必须有一些更简单的方法...)


4
X应用程序在stderr上警告“无法连接到辅助功能总线:”
似乎终端上的每个应用程序都会发出警告和错误消息,即使它运行正常。 Emacs: ** (emacs:5004): WARNING **: Couldn't connect to accessibility bus: Failed to connect to socket /tmp/dbus-xxfluS2Izg: Connection refused 表明: ** (evince:5052): WARNING **: Couldn't connect to accessibility bus: Failed to connect to socket /tmp/dbus-xxfluS2Izg: Connection refused (evince:4985): Gtk-CRITICAL **: gtk_widget_show: assertion 'GTK_IS_WIDGET (widget)' failed (evince:4985): Gtk-CRITICAL **: gtk_widget_show: assertion …
30 terminal  x11  gtk  stderr  bugs 

3
将stdout和stderr重定向到没有文件描述符副本的同一文件是否安全?
我从空目录开始。 $ touch aFile $ ls aFile 然后我有ls两个参数,其中一个不在此目录中。我将两个输出流都重定向到名为的文件output。我>>为了避免同时写而使用。 $ ls aFile not_exist >>output 2>>output $ cat output ls: cannot access 'not_exist': No such file or directory aFile 这似乎可行。这种方法有危险吗?

3
nohup:忽略输入并将stderr重定向到stdout
我正在使用nohup下面提到的在后台启动我的应用程序- root@phx5qa01c:/bezook# nohup java -jar ./exhibitor-1.5.1/lib/exhibitor-1.5.1-jar-with-dependencies.jar -c file --fsconfigdir /opt/exhibitor/conf --hostname phx5qa01c.phx.qa.host.com > exhibitor.out & [1] 30781 root@phx5qa01c:/bezook# nohup: ignoring input and redirecting stderr to stdout 但是每次我看到此消息时- nohup: ignoring input and redirecting stderr to stdout 如果看到此消息,会有任何问题吗?这是什么意思,我该如何避免?


2
“ Segmentation fault”消息是否出现在STDERR下?
我在其中运行了一个可执行文件 bash ./code > log 它在终端上偶尔显示错误消息,而所有printf语句都进入日志文件。我像下面一样重新运行 ./code >& log 现在,偶尔的错误消息也将记录到日志中。但是,如果存在分段错误,它仍会显示在终端上。为什么?如何使消息Segmentation fault (core dumped)进入日志文件? 用户$ bash --version GNU bash版本4.2.24(1)-发行版(i686-pc-linux-gnu)

1
命令输出不在stderr或stdout中
我偶然发现了这个问题,所以我想知道这怎么可能? 标准运行命令: # zabbix_sender -c zabbix_agentd.conf -k mmysql.QCInserts -o 14 info from server: "Processed 0 Failed 1 Total 1 Seconds spent 0.000017" sent: 1; skipped: 0; total: 1 好的,让我们尝试仅获得第一行: # zabbix_sender -c zabbix_agentd.conf -k mmysql.QCInserts -o 14 | head -1 sent: 1; skipped: 0; total: 1 那标准头呢? # zabbix_sender -c …
16 shell  stdout  stderr 

3
何时在Shell脚本中使用重定向到stderr
我知道行为良好的实用程序,例如grep,会将“正常”消息输出到stdout,将错误消息输出到stderr。 $ grep '^foo' file1 file2 file1:foo grep: file2: No such file or directory 当我自己编写shell脚本时,我经常发现很难决定应该在stderr上显示什么输出和哪些消息,或者是否应该打扰。 我想了解一种良好的做法:什么时候将某些消息重定向到stderr是合理的,什么时候不可行? 当然,“取决于情况”,但是您是否有一些见解可以帮助我做出这些决定? 为了使这个主观问题适合格式,我想鼓励回答“为什么”的答案,并以经验为基础,并在可能的情况下以事实为依据。

2
是什么阻止stdout / stderr交错?
假设我运行一些流程: #!/usr/bin/env bash foo & bar & baz & wait; 我像这样运行上面的脚本: foobarbaz | cat 据我所知,当任何进程写入stdout / stderr时,它们的输出都不会交错-stdio的每一行似乎都是原子的。这是如何运作的?哪个实用程序控制每行的原子性?
13 shell  osx  stdout  output  stderr 

2
出现警告或错误时,我应该输出程序名称吗?
如果我正在编写脚本或程序,是否应该将其名称以及警告或错误消息输出到stderr?例如: ./script.sh: Warning! Variable "var" lowered down to 10. 要么: ./prog.py: Error! No such file: "file.cfg". 我了解通常这只是一个口味问题(尤其是您是否自己编写自己的东西),但是我想知道是否有任何常规做法?我相信大多数UNIX / Linux实用程序都会在发生某些情况时写下它们的名称,所以这似乎是一件好事,但是是否有任何准则或不为人知的规则如何做到这一点以及如何做到这一点呢? 例如,不建议将二进制文件安装/usr/bin/在/usr/local/bin/或下。关于输出到stderr是否有类似的规则?我应该在名字后面加上冒号吗?或只是“警告!” 和“错误!” 话?我什么也找不到,但也许有人可以指出我的位置。 这个问题是关于编程实践的,但是我认为在这里比在stackoverflow上更合适,因为它是关于UNIX / Linux的传统,而不是一般的编程。

2
如何(以及为什么)使用stderr进行阅读和书写?
根据此答案由席利,less从标准错误读取导航命令,如果它不能够打开/dev/tty。 这似乎令人困惑,因为我从未见过任何东西可以写入另一个程序的stderr流,而且我什至不知道该如何完成。 stderr对阅读和书写开放的目的是什么?如果这有用,我如何在现代系统上使用它?(例如,是否存在一些奥术语法可将某些内容传递到stderr而不是stdin中?)
12 pipe  stderr 

1
为什么发出相同的命令可以在tty中创建比在pts / gnome-terminal中更多的输出?
gnome终端: $ sudo update-grub [sudo] password for user: Generating grub configuration file ... Found background image: .background_cache.png Found linux image: /boot/vmlinuz-3.16.0-4-amd64 Found initrd image: /boot/initrd.img-3.16.0-4-amd64 done tty1由Ctrl+ Alt+ 访问F1: $ sudo update-grub [sudo] password for user: Generating grub configuration file ... Found background image: .background_cache.png Found linux image: /boot/vmlinuz-3.16.0-4-amd64 Found …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.