免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3374 | 回复: 14
打印 上一主题 下一主题

[文件目录] 重定向问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-07-15 16:20 |只看该作者 |倒序浏览
2>&1和1>&2 输出有什么区别么?
原来是我认为:2>&1  会是先输出错误信息,然后正确信息  1>&2 先输出正确信息,再错误信息,可是实际两则输出的都一样,都是先输出错误信息,然后是正确信息

bash-3.00$ ls yun.txt no.yun.txt
no.yun.txt: 无此文件或目录
yun.txt
------------------------------------------------------------------------
bash-3.00$ ls yun.txt   no.yun.txt >55.txt 2>&1
bash-3.00$ cat 55.txt
no.yun.txt: 无此文件或目录
yun.txt
-------------------------------------------------------------------------

bash-3.00$ ls yun.txt   no.yun.txt 2>66.txt 1>&2
bash-3.00$ cat 66.txt
no.yun.txt: 无此文件或目录
yun.txt
--------------------------------------------------------------------------------
如果我想先输出正确信息,然后是错误信息该怎么做?
我用了追加的方式:
bash-3.00$ ls yun.txt   no.yun.txt >77.txt   2>>77.txt
bash-3.00$ cat 77.txt
yun.txt
xt: 无此文件或目录

发现追加的错误信息并不对,错误信息应该是"no.yun.txt: 无此文件或目录"才对,而现在显示却是"xt: 无此文件或目录",为什么会这样?
--------------------------------------------------------------------------------

我的问题:
1,2>&1和1>&2 输出有什么区别么?
2,如果我想先输出正确信息,然后是错误信息该怎么做?
3,追加的方式中,为什么显示的错误信息不全?

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
2 [报告]
发表于 2014-07-15 16:35 |只看该作者
回复 1# 磨即


    You need:

(ls 1 a >log)2>&1 |cat >>log;

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
3 [报告]
发表于 2014-07-15 16:37 |只看该作者
回复 1# 磨即


1、3两个问题,看十三问:
http://bbs.chinaunix.net/forum.p ... p;page=7#pid1636825

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
4 [报告]
发表于 2014-07-15 16:41 |只看该作者
本帖最后由 ly5066113 于 2014-07-15 16:58 编辑

回复 2# yinyuemi


你的是对的。

论坛徽章:
0
5 [报告]
发表于 2014-07-15 16:50 |只看该作者
回复 4# ly5066113
2楼的能显示正确顺序,我也正好在看你说的那一章所以在实验,不过对于1,3的问题还是有疑问,而且2楼的答案也是错误信息不全"xt: 无此文件或目录"

你给的答案也能显示正确顺序,不过也是错误信息不全

2楼的:
bash-3.00$ (ls  yun.txt   no.yun.txt >99.txt) 2>&1|cat >> 99.txt
bash-3.00$ cat 99.txt
yun.txt
xt: 无此文件或目录


你的:
bash-3.00$ { ls yun.txt no.yun.tx 2>&1 >11.txt; } >> 11.txt
bash-3.00$ cat 11.txt
yun.txt
x: 无此文件或目录


   

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
6 [报告]
发表于 2014-07-15 17:06 |只看该作者
回复 5# 磨即


2楼应该是对的,我这里测试时可以的。可能你的 bash 版本比较老吧。
可以试试 tee 能不能达到你要的效果:
  1. (ls  yun.txt   no.yun.txt >99.txt) 2>&1|tee -a 99.txt
复制代码

论坛徽章:
0
7 [报告]
发表于 2014-07-15 17:13 |只看该作者
未显示出来的no.yun.t是8个字符,yun.txt\n刚好也是8个字符。

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
8 [报告]
发表于 2014-07-15 17:14 |只看该作者
本帖最后由 yinyuemi 于 2014-07-15 17:19 编辑

回复 5# 磨即


    Run the code as a bash script to avoid the overriding file ??  @waker

论坛徽章:
0
9 [报告]
发表于 2014-07-15 17:29 |只看该作者
回复 8# yinyuemi
  1.        #!/bin/bash
  2.        ls yun.txt no.yun.txt >33.txt 2>>33.txt #mine
  3.         (ls  yun.txt   no.yun.txt >99.txt) 2>&1|cat >> 99.txt  #2floor
  4.      { ls yun.txt no.yun.tx 2>&1 >11.txt; } >> 11.txt  #3floor
复制代码
bash-3.00$ cat 11.txt
yun.txt
x: 无此文件或目录
bash-3.00$ cat 33.txt
yun.txt
xt: 无此文件或目录
bash-3.00$ cat 99.txt
yun.txt
no.yun.txt: 无此文件或目录


貌似只有你的用脚本显示全部错误信息


   

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
10 [报告]
发表于 2014-07-15 17:33 |只看该作者
本帖最后由 yinyuemi 于 2014-07-15 17:34 编辑

回复 9# 磨即


   
try :
  1. (ls  yun.txt  no.yun.txt >99.txt;) 2>&1 |(set -C;cat >> 99.txt); cat 99.txt
复制代码

set -C set noclobber option to disallow existing regular files to be overwritten
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP