这个命令在shell linux中做了什么

时间:2013-10-29 21:55:46

标签: linux shell grep tee

TMPFILE=/tmp/jboss_ps.$$
     ${PS} ${PS_OPTS} | \
     grep ${JBOSS_HOME}/java | \
     egrep -v " grep | \
     tee | $0 " | ${AWK} '{print $NF " "}' | \
     sort -u > ${TMPFILE} 2>/dev/null

我想通过上面的代码知道这条精确的线路是做什么的

egrep -v " grep | \
     tee | $0 "

起初我认为那条线正在搜索不包含这个确切字符串“grep | \ tee | $ 0”的所有内容,但看起来egrep正在处理管道,所以这里管道的意义是什么,是不是是OR还是?从我的测试看来它不是,但如果它意味着输出重定向那么内部grep会得到什么?为什么还有一个人呢?

2 个答案:

答案 0 :(得分:0)

AFAIK

egrep -v " grep | \
     tee | $0 "

只是

egrep -v " grep | tee | $0 "

其中\是bash中的延续字符。

egrepgrep -E

相同

-v用于反向选择

tee只是另一个字符串

所以egrep -v " grep | tee | $0 "确实找到了具有字符串{java path}的行并且在此结果中,所有行都与条件{grep OR tee OR $ 0}不匹配 $0 is the filename not a '$0'因为它使用DOUBLE QUOTES而不是单引号:)

" commands | $variables "倾向于扩展变量并使用该实用程序。

答案 1 :(得分:0)

egrep命令之前的管道中的命令可能类似于 ps -ef | grep ....你问的egrep -v(Option)行只是省略了你的行 不希望在结果中,在这种情况下发出的初始grep命令 脚本,任何tee命令,最后$ 0,这是该脚本的名称 被执行。 egrep允许输入用双引号括起来的多个模式 用管道符号分隔。语法egrep - [选项与否]“patern1 | patern2 | patern ...”