我想在我的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
。
为什么调用别名和命令之间有区别?
答案 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}'"
# ^^