Bash别名提供的结果与仅运行命令

时间:2016-02-02 12:44:51

标签: macos bash

我想在我的Mac上找到当前运行的Apache守护程序的路径,所以我把这个别名放在我的~/.profile中:

alias which-apache="ps aux | grep -m 1 -e '^_www' -e 'httpd' | awk '{print $11}'"

这是命令ps aux | grep -m 1 -e '^_www' -e 'httpd'返回的行,显示路径位于第11列:

_www              826   0.0  0.0  2478580    712   ??  S    12:53PM   0:00.00 /opt/local/apache2/bin/httpd -k start

使用awk部分的完整命令为我提供了正确的路径,但是当我运行别名时,我得到的只是:1

为什么调用别名和命令之间有区别?

2 个答案:

答案 0 :(得分:2)

我会使用Bash函数而不是命令:

function which-apache {
    ps aux | grep -m 1 -e '^_www' -e 'httpd' | awk '{print $11}'
}

您使用双引号来定义别名(alias which-apache="..."),而$11正由Bash解释,而不是awk

如果你想用别名来做,可以这样做:

alias which-apache="ps aux | grep -m 1 -e '^_www' -e 'httpd' | awk '{print \$11}'"

甚至:

alias which-apache='ps aux | grep -m 1 -e "^_www" -e "httpd" | awk \'{print $11}\''

答案 1 :(得分:1)

您的$11在双引号内:

alias which-apache="ps aux | grep -m 1 -e '^_www' -e 'httpd' | awk '{print $11}'"
#                                                                          ^^^

$1扩展为空字符串,并添加以下别名:

alias which-apache="ps aux | grep -m 1 -e '^_www' -e 'httpd' | awk '{print 1}'"
#                                                                          ^

逃离$标志:

alias which-apache="ps aux | grep -m 1 -e '^_www' -e 'httpd' | awk '{print \$11}'"
#                                                                          ^^