Ami*_*ani 4 bash alias function
当我创建
alias wd='ps -ef | grep java | awk {'print $2 " " $9'} | egrep "(A|B|C|D)"'
Run Code Online (Sandbox Code Playgroud)
或者
function wd () {
ps -ef | grep java | awk '{print $2}' ...
}
Run Code Online (Sandbox Code Playgroud)
在我的 .bashrc 文件中,出现错误。有趣的是,如果我使用该函数获取我的 .bashrc 文件,它会“编译”,但是在执行时,会给出:
context is
>>> \ <<< {\print
missing }
Run Code Online (Sandbox Code Playgroud)
有人可以帮我解决这个问题,并回答什么时候将某些东西放在函数中而不是别名中更好?
alias wd='ps -ef | grep java | awk {'print $2 " " $9'} | egrep "(A|B|C|D)"'
Run Code Online (Sandbox Code Playgroud)
该alias命令接收三个参数。第一个是字符串wd=ps -ef | grep java | awk {print(单引号防止它们之间的字符具有特殊含义)。第二个参数由一个空格字符组成。(在 中.bashrc,位置参数$2和$9为空,因此$2扩展为 0 个单词的列表。)第三个参数是} | egrep "(A|B|C|D)"(再次用单引号保护特殊字符)。
别名定义在遇到时像任何其他 shell 命令一样被解析。然后在扩展别名时解析为别名定义的字符串。以下是定义此别名的一些可能方法。第一种可能性:由于整个别名定义都在单引号内,因此只能在命令中使用双引号,这意味着您必须使用反斜杠保护awk的"和$含义。
alias wd='ps -ef | grep java | awk "{print \$2 \" \" \$9}" | egrep "(A|B|C|D)"'
Run Code Online (Sandbox Code Playgroud)
第二种可能性:每个字符在单引号内代表自己,除了单引号结束文字字符串。'\''是“单引号字符串中的单引号”的成语:结束单引号字符串,放置一个文字单引号,然后立即开始一个新的单引号字符串。由于没有中间空格,它仍然是同一个词。
alias wd='ps -ef | grep java | awk '\''{print $2 " " $9}'\'' | egrep "(A|B|C|D)"'
Run Code Online (Sandbox Code Playgroud)
您可以稍微简化一下:
alias wd='ps -ef | grep java | awk '\''{print $2, $9}'\'' | egrep "(A|B|C|D)"'
Run Code Online (Sandbox Code Playgroud)
提示:用于set -x查看 shell 如何扩展您的命令。
我不知道。你展示的部分看起来不错。如果您在我的解释后仍然不明白为什么您的函数不起作用,请复制粘贴您的代码。
仅对非常简单的事情使用别名,通常为常用命令提供较短的名称或提供默认选项。例子:
alias grep='grep --color'
alias cp='cp -i'
alias j=jobs
Run Code Online (Sandbox Code Playgroud)
对于更复杂的事情,请使用函数。
与其解析ps输出,不如让它生成适合您的输出。
wd () {
ps -C java -o pid=,cmd= | egrep "(A|B|C|D)"
}
Run Code Online (Sandbox Code Playgroud)