shell中这样的写法echo >&2是什么意思?

pyruby 发布于 2014/09/29 11:01
阅读 3K+
收藏 0

shell脚本中这样的写法是什么含义为什么这样写

#!/bin/bash

echo >&2

echo >&2 'warning: this script is deprecated - see mk.sh'



 

加载中
2
m
mononite

这是shell脚本里一个的小技巧。Unix的一个哲学是"Rule of Silence",一个好脚本的输出不应该太啰嗦,不然不利于和其他应用协作;但实际情况里,很多时候我们又希望看到脚本的执行进度,处理这个问题的一个方法就是把进度信息写到stderr,echo "...." 1>&2,或者echo "..." >&2。这样脚本即可以方便地和其他应用协作(通过管道或者重定向到文件作为其他应用的输入),同时也可以在屏幕上看到进度。

很多不是脚本的应用也会采用这种方式,比如执行java -version,输出的信息是到stderr,而不是stdout。

另外提醒一下,这种技巧主要用在Bourne系列的Shell,在csh或者tcsh里是不能工作的。

0
pyruby
pyruby

#echo 'df' 2> test.txt >&2

标准输出和标准错误输出全部输出到test.txt文件

0
calvary
calvary

 posix.1 标准 定义文件描述符 0 为 标准输入. 1为 标准输出 2 为标准error .

如果有定义标准输出重定向到某个log文件. 那么你的代码.就会把错误信息写到log文件里.

 

0
pyruby
pyruby

引用来自“0-day”的评论

 posix.1 标准 定义文件描述符 0 为 标准输入. 1为 标准输出 2 为标准error .

如果有定义标准输出重定向到某个log文件. 那么你的代码.就会把错误信息写到log文件里.

 

哦 这个我知道的。我就是想知道上面的脚本为何如此写?
0
calvary
calvary

引用来自“宝仔love”的评论

引用来自“0-day”的评论

 posix.1 标准 定义文件描述符 0 为 标准输入. 1为 标准输出 2 为标准error .

如果有定义标准输出重定向到某个log文件. 那么你的代码.就会把错误信息写到log文件里.

 

哦 这个我知道的。我就是想知道上面的脚本为何如此写?

你上面的代码相当.  echo 1>&2   标准输出重定向到标准错误. 

0
pyruby
pyruby

引用来自“宝仔love”的评论

引用来自“0-day”的评论

 posix.1 标准 定义文件描述符 0 为 标准输入. 1为 标准输出 2 为标准error .

如果有定义标准输出重定向到某个log文件. 那么你的代码.就会把错误信息写到log文件里.

 

哦 这个我知道的。我就是想知道上面的脚本为何如此写?

引用来自“0-day”的评论

你上面的代码相当.  echo 1>&2   标准输出重定向到标准错误. 

嗯 这个我也知道。但是他这里没定义错误输出文件,完全可以直接

echo 'warning: this script is deprecated - see mk.sh',这样啊

0
solookin
solookin

引用来自“宝仔love”的评论

引用来自“0-day”的评论

 posix.1 标准 定义文件描述符 0 为 标准输入. 1为 标准输出 2 为标准error .

如果有定义标准输出重定向到某个log文件. 那么你的代码.就会把错误信息写到log文件里.

 

哦 这个我知道的。我就是想知道上面的脚本为何如此写?

引用来自“0-day”的评论

你上面的代码相当.  echo 1>&2   标准输出重定向到标准错误. 

引用来自“宝仔love”的评论

嗯 这个我也知道。但是他这里没定义错误输出文件,完全可以直接

echo 'warning: this script is deprecated - see mk.sh',这样啊

为了方便后续的过滤呢?


0
pyruby
pyruby

引用来自“宝仔love”的评论

引用来自“0-day”的评论

 posix.1 标准 定义文件描述符 0 为 标准输入. 1为 标准输出 2 为标准error .

如果有定义标准输出重定向到某个log文件. 那么你的代码.就会把错误信息写到log文件里.

 

哦 这个我知道的。我就是想知道上面的脚本为何如此写?

引用来自“0-day”的评论

你上面的代码相当.  echo 1>&2   标准输出重定向到标准错误. 

引用来自“宝仔love”的评论

嗯 这个我也知道。但是他这里没定义错误输出文件,完全可以直接

echo 'warning: this script is deprecated - see mk.sh',这样啊

引用来自“solookin”的评论

为了方便后续的过滤呢?


不太懂 能说明下吗?你直接看这个 https://github.com/docker/docker/blob/master/contrib/mkimage-rinse.sh
0
此号作废
此号作废
输出重定向
0
wgjak47
wgjak47
主要是为了过滤吧和不影响标准输出吧。
返回顶部
顶部