繁体   English   中英

Bash变量管道在别名内不起作用?

[英]Bash variable piping not working within an alias?

我尝试在.bash_profile中创建以下作为别名。

alias die_memcached_die="ps -ef | awk '/memcached/ && !/awk/ {print $2}' | xargs kill -9"

如果我直接在终端上运行命令,它工作正常

ps -ef | awk '/memcached/ && !/awk/ {print $2}' | xargs kill -9

或者如果我创建一个bash脚本来运行它。

只是好奇为什么这不能用于别名?

问题是您将别名定义包装在双引号中,因此shell会立即扩展$2并且您的awk脚本不是您期望的那样。

$ cat aa
alias die_memcached_die="ps -ef | awk '/memcached/ && !/awk/ {print $2}' | xargs kill -9"

echo 'Alias command run is:'
echo 'alias die_memcached_die="ps -ef | awk '\''/memcached/ && !/awk/ {print $2}'\'' | xargs kill -9"'
echo 'Alias actually is:'
alias die_memcached_die

alias die_memcached_die='ps -ef | awk '\''/memcached/ && !/awk/ {print $2}'\'' | xargs kill -9'

echo 'Alias actually is:'
alias die_memcached_die

$ /bin/bash aa
Alias command run is:
alias die_memcached_die="ps -ef | awk '/memcached/ && !/awk/ {print $2}' | xargs kill -9"
Alias actually is:
alias die_memcached_die='ps -ef | awk '\''/memcached/ && !/awk/ {print }'\'' | xargs kill -9'
Alias actually is:
alias die_memcached_die='ps -ef | awk '\''/memcached/ && !/awk/ {print $2}'\'' | xargs kill -9'

可以说,关于OP的两个评论都是关于这是一个糟糕的别名和一个糟糕的想法是正确的。

别名应该用单引号括起来,以防止shell插入前面带有$变量。

你应该有你的别名:

alias die_memcached_die='ps -ef | awk "/memcached/ && !/awk/ {print \$2}" | xargs kill -9'

你可以在单引号内定义awk但是你需要确保你逃脱它们。

另外,也看看功能。 它们提供了比别名更好的可扩展性和可靠性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM