免费注册 查看新帖 |

Chinaunix

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

问个shell的圭问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-08-19 23:06 |只看该作者 |倒序浏览
正在看DeveloperWorks上的LPI 101教程

我在某个目录下新建了xaa, xab两个文件
然后ls x*,显示
xaa xab

然后我ls x* > stdout.txt,再cat stdout.txt,显示
xaa
xab

都是ls x*的输出,为什么直接显示就是一行,写到stdout.txt里就显示成两行呢?谢谢。

论坛徽章:
0
2 [报告]
发表于 2008-08-19 23:18 |只看该作者

回复 #1 向死而生 的帖子

另一个想不明白的问题

ls x* z* 2>&1 >output.txt,我把这个命令分成三块,分别是
1.(ls x* z*)
2.(2>&1)
3.(>output.txt)

这样分隔对不对?
shell是按什么顺序来解释这三部分的?为什么2和3互换之后,写成
ls x* z* > output 2>&1
输出就不一样了呢?

想不明白……汗

论坛徽章:
0
3 [报告]
发表于 2008-08-19 23:28 |只看该作者

回复 #1 向死而生 的帖子

info ls
By default, the output is sorted alphabetically, according to the
locale settings in effect.(1) If standard output is a terminal, the
output is in columns (sorted vertically) and control characters are
output as question marks; otherwise, the output is listed one per line
and control characters are output as-is.

论坛徽章:
0
4 [报告]
发表于 2008-08-19 23:33 |只看该作者

回复 #2 向死而生 的帖子

ls x* z* 2>&1 >output.txt
ls x* z* 2>&1 该命令输出重定向到output.txt

ls x* z* > output 2>&1
ls x* z* > output 执行该命令,将该命令的标准错误输出也重定向到标准输出

建议楼主多看置顶篇

[ 本帖最后由 爱知 于 2008-8-19 23:34 编辑 ]

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
5 [报告]
发表于 2008-08-20 00:17 |只看该作者
原帖由 向死而生 于 2008-8-19 23:06 发表
正在看DeveloperWorks上的LPI 101教程

我在某个目录下新建了xaa, xab两个文件
然后ls x*,显示
xaa xab

然后我ls x* > stdout.txt,再cat stdout.txt,显示
xaa
xab

都是ls x*的输出,为什么直接显 ...

是关于ls输出方式的问题,man ls.

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
6 [报告]
发表于 2008-08-20 00:19 |只看该作者
原帖由 向死而生 于 2008-8-19 23:18 发表
另一个想不明白的问题

ls x* z* 2>&1 >output.txt,我把这个命令分成三块,分别是
1.(ls x* z*)
2.(2>&1)
3.(>output.txt)

这样分隔对不对?
shell是按什么顺序来解释这三部分的?为什么2和3互换之后 ...


这是关于重定向的问题,从左到右逐个解释。

ls x* z* 2>&1 >output.txt ;2输出到和1相同的地方(屏幕) , 1输出到文件output.txt,

ls x* z* >output.txt 2>&1 ;1输出到文件output.txt, 2输出到和1相同的地方(文件output.txt)
是不同的。

[ 本帖最后由 blackold 于 2008-8-20 00:21 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2008-08-20 09:52 |只看该作者

回复 #4 爱知 的帖子

谢谢指点。没看置顶就来提问,实在不好意思。

仔细看了man ls,发现加上-x选项,输出到terminal和文件的显示就一样了。谢谢!

论坛徽章:
0
8 [报告]
发表于 2008-08-20 09:54 |只看该作者

回复 #6 blackold 的帖子

有点明白了。用个不太恰当的比喻:

2>&1 这种写法是用的传值而不是传指针。是把2重定向到1的当前值。以后1再怎么变化,2都不变了,除非又显式的指明2>&1。

我这样理解对不对?

谢谢。

论坛徽章:
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
9 [报告]
发表于 2008-08-20 10:12 |只看该作者
原帖由 向死而生 于 2008-8-20 09:54 发表
有点明白了。用个不太恰当的比喻:

2>&1 这种写法是用的传值而不是传指针。是把2重定向到1的当前值。以后1再怎么变化,2都不变了,除非又显式的指明2>&1。

我这样理解对不对?

谢谢。


找一个你目录中不存在的文件试一下就知道了。假设你的目录中不存在文件 file111

ls file111 x* 2>&1 >output.txt

ls file111 x* >output.txt 2>&1

分别看看 屏幕 和 output.txt 中有什么不同。

论坛徽章:
0
10 [报告]
发表于 2008-08-20 10:33 |只看该作者

回复 #9 ly5066113 的帖子

我提问以前就试过了啊。stderr一个是在屏幕上一个是在文件里,只是不明白为什么不一样,所以才来提问的。:wink:
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP