如何用引号创建别名

如何用引号创建别名

我尝试使用引号创建别名,如下所示:

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=`'

相关内容