在shell脚本中,我们可以使用exec命令将默认输入更改为文件,如下所示:exec1>outputfile但是,如果在同一个脚本中,如果我想将标准输出描述符“1”恢复为默认值(终端)。我们怎样才能做到这一点? 最佳答案 这个例子Example20-2.Redirectingstdoutusingexec#!/bin/bash#reassign-stdout.shLOGFILE=logfile.txtexec6>&1#Linkfiledescriptor#6withstdout.#Savesstdout.exec>$LOGFILE#
当程序开始时,它是否默认为stdin、stdout和stderr使用文件描述符0、1和2?并且API调用(例如open(...)、socket(...)不会返回0、1和2,因为这些值已经被采用了吗?open(...)或socket(...)是否会返回0、1或2。而0、1和2与stdin、stdout和stderr无关。 最佳答案 在filedescriptorlevel,stdin定义为文件描述符0,stdout定义为文件描述符1;stderr被定义为文件描述符2。参见this.即使您的程序或shell更改(例如,使用dup2(2)
当程序开始时,它是否默认为stdin、stdout和stderr使用文件描述符0、1和2?并且API调用(例如open(...)、socket(...)不会返回0、1和2,因为这些值已经被采用了吗?open(...)或socket(...)是否会返回0、1或2。而0、1和2与stdin、stdout和stderr无关。 最佳答案 在filedescriptorlevel,stdin定义为文件描述符0,stdout定义为文件描述符1;stderr被定义为文件描述符2。参见this.即使您的程序或shell更改(例如,使用dup2(2)
我正在执行一个将崩溃报告转储到STDERR的程序,我必须从那里过滤一些必要的信息。问题是我无法使用grep将STDERR重定向到STDOUT和PIPEcommand2>&1>/dev/null|grep"^[^-]">&/tmp/fl出现错误:输出重定向不明确。相同的命令在bash终端下有效。我应该更改什么才能使其正常工作? 最佳答案 csh在文件重定向方面明显比bash受限。在csh中,您可以使用通常的>运算符重定向stdout,您可以同时重定向stdout和stderr与>&运营商,你可以管道stdout和stderr与|&运营
我正在执行一个将崩溃报告转储到STDERR的程序,我必须从那里过滤一些必要的信息。问题是我无法使用grep将STDERR重定向到STDOUT和PIPEcommand2>&1>/dev/null|grep"^[^-]">&/tmp/fl出现错误:输出重定向不明确。相同的命令在bash终端下有效。我应该更改什么才能使其正常工作? 最佳答案 csh在文件重定向方面明显比bash受限。在csh中,您可以使用通常的>运算符重定向stdout,您可以同时重定向stdout和stderr与>&运营商,你可以管道stdout和stderr与|&运营
有时我们会以这种方式在我们的代码中放置一些调试打印printf("successfullyreachedatdebug-point1\n");somecodeishereprintf("successfullyreachedatdebug-point2");在最后一个printf之后发生了段错误。现在在这种情况下,只有debug-point1会在stdio上打印debug-point2打印被写入stdio缓冲区但它没有被刷新,因为它没有得到\n所以我们认为崩溃在调试点1之后发生。为了解决这个问题,如果我用stdio和stderr禁用缓冲选项,就像这样setvbuf(stdout,NUL
有时我们会以这种方式在我们的代码中放置一些调试打印printf("successfullyreachedatdebug-point1\n");somecodeishereprintf("successfullyreachedatdebug-point2");在最后一个printf之后发生了段错误。现在在这种情况下,只有debug-point1会在stdio上打印debug-point2打印被写入stdio缓冲区但它没有被刷新,因为它没有得到\n所以我们认为崩溃在调试点1之后发生。为了解决这个问题,如果我用stdio和stderr禁用缓冲选项,就像这样setvbuf(stdout,NUL
我想知道是否有一个内置的BASH命令可以在stderr上打印一些文本,就像echo命令在stdout上打印文本一样。我不想使用临时io重定向。我使用内置命令在stderr上生成错误,例如ls--asdf(ls:无法识别的选项“--asdf”),但我想要更整洁的东西。编辑----实际上我正在尝试演示stderr/stdout重定向,我的示例如下所示:shtest.sh>test-out.txt2>test-err.txt为了清楚起见,我想让test.sh文件尽可能简单和干净,这意味着避免在文件中使用>运算符。 最佳答案 echosom
我想知道是否有一个内置的BASH命令可以在stderr上打印一些文本,就像echo命令在stdout上打印文本一样。我不想使用临时io重定向。我使用内置命令在stderr上生成错误,例如ls--asdf(ls:无法识别的选项“--asdf”),但我想要更整洁的东西。编辑----实际上我正在尝试演示stderr/stdout重定向,我的示例如下所示:shtest.sh>test-out.txt2>test-err.txt为了清楚起见,我想让test.sh文件尽可能简单和干净,这意味着避免在文件中使用>运算符。 最佳答案 echosom
在30分钟徒劳地trycatchwget的输出后,我发现程序写入了stderr而不是stdout。在网络和堆栈溢出中搜索表明这是一个众所周知的事实。知道为什么会这样吗? 最佳答案 众所周知,因为它在manual中.在stderr上报告消息很常见,因为消息与stdout上的常规输出分开。当您将多个工具与管道结合使用时,这很有用。在这种情况下,当常规输出和诊断消息混淆时,情况会很糟糕。 关于linux-为什么wget输出到stderr而不是stdout?,我们在StackOverflow上找