我尝试使用引号创建别名,如下所示:
alias myalias='ps -ef | grep tomcat | kill -9 `awk {'print $2'}`'
但正如你所见,我已经'
在 awk 中
所以我尝试替换
awk {'print $2'}
和
awk {"print $2"}
但是当我运行这个别名时,奇怪的事情发生了,即控制台窗口关闭了...我怎样才能让这个别名起作用
答案1
使用函数而不是别名可以避免大多数引用问题:
myfn() { ps -ef | awk '/tomcat/ {print $2}' | xargs kill -9; }
如果您使用 awk,则不需要 grep。
或者,坚持使用一个功能并避免几乎所有你正在做的工作:
alias myalias='pkill -9 -f tomcat'
答案2
您可以将单引号与双引号“粘合”在一起:
alias myalias='ps -ef | grep tomcat | kill -9 `awk {'"'"'print $2'"'"'}`'
这是一个有趣的参考:https://stackoverflow.com/questions/1250079/escaping-single-quotes-within-single-quoted-strings
但是,有更简单的解决方案可以终止进程,而不是使用多个管道或额外的单引号(参见其他答案)。在这里,我只是想回答你的初始问题,保持你的逻辑。
答案3
以下是别名引用的要点:
alias x='echo dollar sign: \$ "single quote: '\'' backslash: \\ double quote: \"."'
$ alias x
alias x='echo dollar sign: \$ "single quote: '\'' backslash: \\ double quote: \"."'
$ x
dollar sign: $ single quote: ' backslash: \ double quote: ".
几乎没有什么事情是做不到的,几乎所有能打字的事情都可以狂欢命令行可以输入别名。
答案4
不要运行这些多个管道,而是使用参数来ps
仅获取要开始的 pid:
alias killtc='kill `ps -C tomcat -o pid=`'