在别名中使用管道
Using pipes in an alias
我的.bashrc
里有这个:
alias jpsdir="jps | awk '{print }' | xargs pwdx"
但是当我使用 jpsdir
我得到这个输出:
pwdx: invalid process id: JvmName
但是运行
jps | awk '{print }' | xargs pwdx
给出正确的结果:
1234: /some/dir/
我的别名有什么问题?我应该把它变成一个函数吗?
正如 gniourf_gniourf 在评论中解释的那样,您的别名不起作用的原因是因为您的 awk 命令中的 </code> 被 shell 扩展了。该值可能为空,因此 awk 命令变为 <code>{print }
并且 pwdx
被传递到 jps
.
的输出的两个部分
您可以通过完全避免使用 awk 来避免转义 $
;你可以使用 -q
开关而不是管道到 awk:
jpsdir() {
jps -q | xargs pwdx
}
我个人更喜欢使用函数,但如果您愿意,可以使用别名。
一直在尝试 运行 : date | awk '{print }'
作为从日期命令中提取时间的命令。
当我将 运行“时间”作为命令时,我得到了这个乱码:
time
real 0m0.000s
user 0m0.000s
sys 0m0.000s
所以时间是日期命令中的第 5 个字符串项,当我使用 awk 命令将它取出时我非常高兴,这是我第一次尝试使用 awk。
正如 Tom French 的回答所建议的那样,如果您去掉上面的 $x,该命令将打印整个日期字符串。
在我遇到一个不会 运行.
的非常简单的例子之前,我并没有尝试使用 alias 命令。
我的.bashrc
里有这个:
alias jpsdir="jps | awk '{print }' | xargs pwdx"
但是当我使用 jpsdir
我得到这个输出:
pwdx: invalid process id: JvmName
但是运行
jps | awk '{print }' | xargs pwdx
给出正确的结果:
1234: /some/dir/
我的别名有什么问题?我应该把它变成一个函数吗?
正如 gniourf_gniourf 在评论中解释的那样,您的别名不起作用的原因是因为您的 awk 命令中的 </code> 被 shell 扩展了。该值可能为空,因此 awk 命令变为 <code>{print }
并且 pwdx
被传递到 jps
.
您可以通过完全避免使用 awk 来避免转义 $
;你可以使用 -q
开关而不是管道到 awk:
jpsdir() {
jps -q | xargs pwdx
}
我个人更喜欢使用函数,但如果您愿意,可以使用别名。
一直在尝试 运行 : date | awk '{print }'
作为从日期命令中提取时间的命令。
当我将 运行“时间”作为命令时,我得到了这个乱码:
time
real 0m0.000s
user 0m0.000s
sys 0m0.000s
所以时间是日期命令中的第 5 个字符串项,当我使用 awk 命令将它取出时我非常高兴,这是我第一次尝试使用 awk。 正如 Tom French 的回答所建议的那样,如果您去掉上面的 $x,该命令将打印整个日期字符串。 在我遇到一个不会 运行.
的非常简单的例子之前,我并没有尝试使用 alias 命令。