BBS.ChinaUnix.net
首页 | 新闻 | Linux | FreeBSD | AIX | Windows | 博客 | 论坛 | 存储 | 网络 | 人才 | Wiki | 资料 | 读书 | 手册 | 下载 | 空间 | 搜索
  免费注册 | 忘记密码 | 会员登录 | 搜索 | 帮助 



shell怎么将输出到标准错误
首页 » 论坛 » Shell »  
[打印] [订阅] [收藏] [本帖文本页] [推荐此主题给朋友,立即获积分]
  [已解决] 本主题悬赏 可用积分 5  
皇家救星
风云使者
皇家救星



CU编号: 796256
注册:2008-12-20
最后登录: 2009-07-05
帖子:661
精华:0

可用积分:1530 (家境小康)
信誉积分:130
专家积分:30 (本版:25)
空间积分:0
推广积分:0

状态:...离线...

[个人空间] [短信] [博客]


1楼 发表于 2009-1-8 21:58 

我写了一个脚本,里面的部分输出语句不想输出到标准输出,想输出到标准错误,这样别人用我的脚本重定向时才能在屏幕上看到这具错误信息

尝试将这些echo重定向到标准输出,但达不到效果
echo "hello" > &2 > test.txt

结果发现hello直接到了test.txt 里面了 跟我要的效果不一样



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

三分天注定 七分靠打拼
ynchnluiti (andy)
精灵使



CU编号: 90672
注册:2003-8-29
最后登录: 2009-07-03
帖子:3715
精华:0

可用积分:24776 (巨富豪门)
信誉积分:100
专家积分:646 (本版:190)
空间积分:0
推广积分:1456

状态:...离线...

[个人空间] [短信] [博客]


     最佳答案 
2楼 发表于 2009-1-8 21:58 



QUOTE:
原帖由 皇家救星 于 2009-1-8 22:59 发表
cmd > output.txt

这种情况需要本身cmd命令就会把错误提示传进标准错误,正确结果传进标准输出

例如我用shell写一个cat命令就不知道在源文件不存在的时候怎么将“源文件不存在”这一行信息传给标准错误
...

cat test.sh

#!/bin/sh

#write to stderr
exec 4>&1    #dup 4 as stdout, i.e. backup stdout
exec >&2     #redirect stdout as stderr
echo "stderr, hello"
echo "stderr, world"
exec >&4     #restore stdout
exec 4>&-    #close fd 4

#write to stdout
echo "stdout, hello world"



QUOTE:
$ ./test.sh
stderr, hello
stderr, world
stdout, hello world
$ ./test.sh >out
stderr, hello
stderr, world
$ cat out
stdout, hello world




您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

天行健,君子以自强不息
发奋忘食,乐以忘优,不知老之将至
温故而知新
皇家救星
风云使者
皇家救星



CU编号: 796256
注册:2008-12-20
最后登录: 2009-07-05
帖子:661
精华:0

可用积分:1530 (家境小康)
信誉积分:130
专家积分:30 (本版:25)
空间积分:0
推广积分:0

状态:...离线...

[个人空间] [短信] [博客]


3楼 发表于 2009-1-8 22:00 

基本就是要找一个命令达到C里面fprintf(stderr, ...)的效果



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

三分天注定 七分靠打拼
chenwenming   帅哥 (一阵风)
精灵王



CU编号: 313385
注册:2005-9-14
最后登录: 2009-05-22
帖子:278
精华:0

可用积分:364 (稍有积蓄)
信誉积分:100
专家积分:0 (本版:0)
空间积分:0
推广积分:0

状态:...离线...

[个人空间] [短信] [博客]


4楼 发表于 2009-1-8 22:03 

回复 #2 皇家救星 的帖子

echo "hello" > test.txt  2>&1  

是这个意思?



您对本贴的看法:鲜花[0] 臭蛋[0]
皇家救星
风云使者
皇家救星



CU编号: 796256
注册:2008-12-20
最后登录: 2009-07-05
帖子:661
精华:0

可用积分:1530 (家境小康)
信誉积分:130
专家积分:30 (本版:25)
空间积分:0
推广积分:0

状态:...离线...

[个人空间] [短信] [博客]


5楼 发表于 2009-1-8 22:11 

手头没环境,LS可否解释一下语句?

我看着样子像是把标准输出定向到test.txt 把标准错误定向到标准输出

这样结果应该是标准错误和标准输出全都往test.txt里面去了 这跟我要的效果不一样



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

三分天注定 七分靠打拼
皇家救星
风云使者
皇家救星



CU编号: 796256
注册:2008-12-20
最后登录: 2009-07-05
帖子:661
精华:0

可用积分:1530 (家境小康)
信誉积分:130
专家积分:30 (本版:25)
空间积分:0
推广积分:0

状态:...离线...

[个人空间] [短信] [博客]


6楼 发表于 2009-1-8 22:13 

例如脚本如下:

demo.sh:

echo stdout
echo stderr

我希望别人用demo.sh > file.txt后stderr不会出现在file.txt 而stdout则要出现在file.txt



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

三分天注定 七分靠打拼
chenwenming   帅哥 (一阵风)
精灵王



CU编号: 313385
注册:2005-9-14
最后登录: 2009-05-22
帖子:278
精华:0

可用积分:364 (稍有积蓄)
信誉积分:100
专家积分:0 (本版:0)
空间积分:0
推广积分:0

状态:...离线...

[个人空间] [短信] [博客]


7楼 发表于 2009-1-8 22:21 

回复 #1 皇家救星 的帖子




您对本贴的看法:鲜花[0] 臭蛋[0]
wertyu
骑士




CU编号: 787345
注册:2008-11-23
最后登录: 2009-04-07
帖子:76
精华:0

可用积分:148 (白手起家)
信誉积分:0
专家积分:5 (本版:0)
空间积分:0
推广积分:0

状态:...离线...

[个人空间] [短信] [博客]


8楼 发表于 2009-1-8 22:33 



QUOTE:
原帖由 皇家救星 于 2009-1-8 21:58 发表
我写了一个脚本,里面的部分输出语句不想输出到标准输出,想输出到标准错误,这样别人用我的脚本重定向时才能在屏幕上看到这具错误信息

尝试将这些echo重定向到标准输出,但达不到效果
echo "hello" > &2 > test.txt

结果发现hello直接到了test.txt 里面了 跟我要的效果不一样

依照shell从左往右的解释顺序
step 0: echo "hello"  命令执行的结果是标准输出'hello"
step 1: > &2 设置:将标准输出打印到stderr相同的地方e
step 2: >  test.txt   将标准输出重定向到文件 test.txt,于是你step 1中的设置没有任何用处

QUOTE:
原帖由 皇家救星 于 2009-1-8 22:13 发表
例如脚本如下:

demo.sh:

echo stdout
echo stderr

我希望别人用demo.sh > file.txt后stderr不会出现在file.txt 而stdout则要出现在file.txt

你这里的两个echo都只有stdout,根本没有stderr,如果要实现你的要求,举例:

目录test下有一个文件:
$ cat foo
Hello world             #标准输出
$ cat bar                   # 文件bar是不存在的
cat: bar: No such file or directory    #标准错误
$ cat foo bar
Hello World            #标准输出
cat: bar: No such file or directory   #标准错误
$ cat foo bar > test.txt   #将标准输出从定向到文件test.txt,标准错误没设置,所以会默认打印到stderr(一般是终端),
                                               #所以你根本不用担心stderr会输出到文件test.txt里
cat: bar: No such file or directory          #标准错误被输出到stderr

$ cat test.txt
Hello World                         # 文件test.txt里只有命令执行结果的标准输出

[ 本帖最后由 wertyu 于 2009-1-8 22:37 编辑 ]



您对本贴的看法:鲜花[0] 臭蛋[0]
haimming   帅哥
大天使



CU编号: 762165
注册:2008-9-14
最后登录: 2009-07-04
帖子:1984
精华:0

可用积分:6610 (富足长乐)
信誉积分:0
专家积分:25 (本版:15)
空间积分:0
推广积分:0

状态:...保密...

[个人空间] [短信] [博客]


9楼 发表于 2009-1-8 22:39 

呵呵,lz想多了
demo.sh > file.txt
就可以了,2没指定,err是不会进去file.txt的



您对本贴的看法:鲜花[0] 臭蛋[0]
皇家救星
风云使者
皇家救星



CU编号: 796256
注册:2008-12-20
最后登录: 2009-07-05
帖子:661
精华:0

可用积分:1530 (家境小康)
信誉积分:130
专家积分:30 (本版:25)
空间积分:0
推广积分:0

状态:...离线...

[个人空间] [短信] [博客]


10楼 发表于 2009-1-8 22:47 

如果demo.sh是这样
demo.sh:

echo stdout_info
echo stderr_info
demo.sh > file.txt 后file.txt里面肯定是有两行

但我现在不希望stderr_info出现在file.txt里面(stderr_info是我想输出的一些提示信息,而stdout_info才是真正执行脚本后的结果),因为echo是标准输出命令,所以想请教大家,用什么命令替换echo好?



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

三分天注定 七分靠打拼

首页 » 论坛 » Shell »


 


Copyright © 2001-2009 ChinaUnix.net All Rights Reserved     联系我们:

感谢所有关心和支持过ChinaUnix的朋友们    转载本站内容请注明原作者名及出处

京ICP证041476号


清除 Cookies - ChinaUnix - Archiver - WAP - TOP

Processed in 0.066789 second(s), 4 queries , Gzip enabled