在别名中使用管道

时间:2016-01-09 13:04:24

标签: bash shell unix awk alias

我在.bashrc

中有这个
alias jpsdir="jps | awk '{print $1}' | xargs pwdx"

但是当我使用jpsdir时,我得到了这个输出:

pwdx: invalid process id: JvmName

但正在运行

jps | awk '{print $1}' | xargs pwdx

给出了正确的结果:

1234: /some/dir/

我的别名有什么问题?我应该把它变成一个功能吗?

1 个答案:

答案 0 :(得分:4)

正如gniourf_gniourf在评论中解释的那样,你的别名不起作用的原因是因为你的awk命令中的$1被shell扩展了。该值可能为空,因此awk命令变为{print }pwdx正在传递jps输出的两个部分。

您可以避免因完全避免使用awk而逃离$;你可以使用-q开关而不是管道到awk:

jpsdir() {
    jps -q | xargs pwdx
}

我个人更喜欢使用函数,但如果愿意,可以使用别名。