由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Linux版 - 问一个 Shell 的问题
相关主题
教如何提取运行结果,用grep,awk等shell commandGrep 能作这个吗?
A question about two linux commands耗时很长的一个command
/etc/passwd 里面没有user ids?求助, 为什么用find -exec 就没权限cp文件
stdout/stderr redirectproblem with "\"
bash 中如何将命令的返回值存到变量中?求助问问应该学用那个shell?
问个shell重定向输出的问题求教 shell script
后台运行以后用jobs查看,为什么不能作为variable 输出?A simple Bash question about changing directory
怎么看网络电视啊?有用ipython当shell用的吗?
相关话题的讨论汇总
话题: grep话题: echo话题: aa话题: exit话题: status
进入Linux版参与讨论
1 (共1页)
v*****r
发帖数: 1119
1
ps -ef | grep "command" | grep -v grep
以上命令的 exit status ($?) 在match到 “command" 的时候是 0,在没有 match 的
时候是 1.
在没有 match 的时候,觉得 exit status 也应该是由 ”grep -v grep“ 决定的呀
, 为什么会是 1 哪?
h*******c
发帖数: 248
2
echo "aa"|grep -v "aa";echo $?
1
Anything wrong?
v*****r
发帖数: 1119
3
你和我问的是同一个问题,唯一能解释的通的理由就是:
grep -v 在只有一行 input passed through standard input 的时候,会把 exit
status 设成 1 , 因为只有一行 input 的话,grep -v 就能 assume no match, 我的
猜想

【在 h*******c 的大作中提到】
: echo "aa"|grep -v "aa";echo $?
: 1
: Anything wrong?

h*******c
发帖数: 248
4
true;echo $?
0
false;echo $?
1
echo "aa"|grep -v "aa";echo $?
1
echo "aa"|grep -v "bb";echo $?
aa
0
I don't think anything strange here."aa" not match -v "aa", so return false,
"aa" match -v "bb" so return true.
v*****r
发帖数: 1119
5
主要是想搞清为什么这两个 cases 下, $? 会不同
{ echo "aa"; } | grep -v "aa" ; echo $?
{ echo "aa"; echo "bb"; } | grep -v "aa" ; echo $?
我这么理解对不对?
grep -v 没 output, set $? to 1
grep -v 有 output, set $? to 0

false,

【在 h*******c 的大作中提到】
: true;echo $?
: 0
: false;echo $?
: 1
: echo "aa"|grep -v "aa";echo $?
: 1
: echo "aa"|grep -v "bb";echo $?
: aa
: 0
: I don't think anything strange here."aa" not match -v "aa", so return false,

c*******t
发帖数: 13
6
$ man 1 grep
EXIT STATUS
Normally, the exit status is 0 if selected lines are found and
1
otherwise. But the exit status is 2 if an error occurred, unless
the
-q or --quiet or --silent option is used and a selected line is
found.
Note, however, that POSIX only mandates, for programs such as
grep,
cmp, and diff, that the exit status in case of error be greater than
1;
it is therefore advisable, for the sake of portability, to use
logic


【在 v*****r 的大作中提到】
: 主要是想搞清为什么这两个 cases 下, $? 会不同
: { echo "aa"; } | grep -v "aa" ; echo $?
: { echo "aa"; echo "bb"; } | grep -v "aa" ; echo $?
: 我这么理解对不对?
: grep -v 没 output, set $? to 1
: grep -v 有 output, set $? to 0
:
: false,

v*****r
发帖数: 1119
7
你没看清我问的问题: grep -v 是根据什么设 exit status 的? Manual 里没提到。
从以下这两个 commands 的对比来看,似乎只能是根据 grep -v 后还有没有 line(s)
left for stdout 来决定 exit status 的value了。
{ echo "aa"; } | grep -v "aa" ; echo $?
{ echo "aa"; echo "bb"; } | grep -v "aa" ; echo $?
有时间俺会 check out grep 的 source code 来 confirm 一下。

and

【在 c*******t 的大作中提到】
: $ man 1 grep
: EXIT STATUS
: Normally, the exit status is 0 if selected lines are found and
: 1
: otherwise. But the exit status is 2 if an error occurred, unless
: the
: -q or --quiet or --silent option is used and a selected line is
: found.
: Note, however, that POSIX only mandates, for programs such as
: grep,

j*a
发帖数: 14423
8
你要这么想 grep有输出就是0 没有就是1
grep aa和grep -v aa只是形式是这么做的
要是改为 grep "aa" 和 grep "![aa]"什么的 这就好理解了 别太在意那个-v

)

【在 v*****r 的大作中提到】
: 你没看清我问的问题: grep -v 是根据什么设 exit status 的? Manual 里没提到。
: 从以下这两个 commands 的对比来看,似乎只能是根据 grep -v 后还有没有 line(s)
: left for stdout 来决定 exit status 的value了。
: { echo "aa"; } | grep -v "aa" ; echo $?
: { echo "aa"; echo "bb"; } | grep -v "aa" ; echo $?
: 有时间俺会 check out grep 的 source code 来 confirm 一下。
:
: and

1 (共1页)
进入Linux版参与讨论
相关主题
有用ipython当shell用的吗?bash 中如何将命令的返回值存到变量中?求助
发包子 echo 求助问个shell重定向输出的问题
substring 的问题后台运行以后用jobs查看,为什么不能作为variable 输出?
问题怎么看网络电视啊?
教如何提取运行结果,用grep,awk等shell commandGrep 能作这个吗?
A question about two linux commands耗时很长的一个command
/etc/passwd 里面没有user ids?求助, 为什么用find -exec 就没权限cp文件
stdout/stderr redirectproblem with "\"
相关话题的讨论汇总
话题: grep话题: echo话题: aa话题: exit话题: status