我尝试使用引号进行别名,如下所示:
alias myalias='ps -ef | grep tomcat | kill -9 `awk {'print $2'}`'
但正如你所看到的,我已经有了' awk”
所以我试图更换
awk {'print $2'}
同
awk {"print $2"}
但后来奇怪的事情发生在我运行这个别名,即控制台窗口closures…我怎么能使这个别名工作
使用函数而不是别名可以避免大多数引用问题:
myfn() { ps -ef | awk '/tomcat/ {print $2}' | xargs kill -9; }
如果你使用的是awk,不需要grep。
或者,坚持一个function,避免几乎所有的工作:
alias myalias='pkill -9 -f tomcat'
你可以用双引号“粘合”单引号:
alias myalias='ps -ef | grep tomcat | kill -9 `awk {'"'"'print $2'"'"'}`'
这是一个有趣的参考: https : //stackoverflow.com/questions/1250079/escaping-single-quotes-within-single-quoted-strings
但是,有更简单的解决scheme杀死一个进程,而不是使用多个pipe道或额外的单引号(Cf别人的答案)。 在这里,我只是想回答你最初的问题,保持你的逻辑。
不要运行这些多个pipe道,而是使用参数ps来获取仅以pid开头的参数:
alias killtc='kill `ps -C tomcat -o pid=`'