bash – 这些流重定向如何工作?
从
this perldoc page,
>要一起捕获命令的STDERR和STDOUT: ? $output = `cmd 2>&1`; >捕获命令的STDOUT但丢弃其STDERR: ? $output = `cmd 2>/dev/null`; >捕获命令的STDERR但丢弃其STDOUT(这里的排序很重要): ? $output = `cmd 2>&1 1>/dev/null`; >要交换命令的STDOUT和STDERR以捕获STDERR,但让其STDOUT退出旧的STDERR: ? $output = `cmd 3>&1 1>&2 2>&3 3>&-`; 我不明白3和4是如何工作的,我不太清楚我对1和2的理解是对的.以下是我的理解.请纠正我错在哪里. 我知道0,1和2表示STDIN,STDOUT和STDERR. >重定向2到1,以便它们现在都使用相同的流(& escapeped 1确保STDERR不会被重定向到名为1的文件) $output = `cmd 1>/dev/null`; 另外,如果目标是在STDOUT获取STDERR消息,那么1> / dev / null是否会将所有内容重定向到/ dev / null? 解决方法
真的,这些都不是Perl – 所有这些都是由你使用反引号运算符调用的shell处理的.所以你最好的阅读是man sh,或
Shell chapter of the Unix standard.
简而言之,对于#4: > 3>& 1:打开FD 3以指向stdout当前指向的位置.> 1>& 2:重新打开标准输出以指向stderr当前指向的位置.> 2>& 3:重新打开stderr以指向FD 3当前指向的位置,这是stdout在上一步骤完成之前指向的位置.现在stdout和stderr已成功交换.> 3>& – :关闭FD 3,因为它不再需要了. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 免费的WebService接口
- angularjs – typescript:import jspm libraries
- angularjs – Angular ui-router在同一状态的子视图之间传递
- bash – 用原来的所有符号链接替换
- 将Scala中的CSV读入具有错误处理的类实例
- angularjs – 量角器过滤器,如何在过滤元素中查找元素
- 在Grep的输出中打开文件到Vim的-o -mode
- 进入编辑模式 , vim命令模式 , vim实践
- 使用adb shell dumpsys检测Android的Activity任务栈
- activiti designer源码的研究(四) 之servicetask调用webser