Por que o alias não funciona
alias wd='ps -ef | grep java | awk {'print $2 " " $9'} | egrep "(A|B|C|D)"'
O comando alias
recebe três argumentos. A primeira é a string wd=ps -ef | grep java | awk {print
(as aspas simples impedem que os caracteres entre elas tenham um significado especial). O segundo argumento consiste em um único caractere de espaço. (Em .bashrc
, os parâmetros posicionais $2
e $9
estão vazios, então $2
expande para uma lista de 0 palavras.) O terceiro argumento é } | egrep "(A|B|C|D)"
(novamente as aspas simples protegem os caracteres especiais).
A definição do alias é analisada como qualquer outro comando shell quando é encontrado. Em seguida, a cadeia definida para o alias é analisada quando o alias é expandido. Aqui estão algumas maneiras possíveis de definir esse alias. Primeira possibilidade: como toda a definição de alias está entre aspas simples, use apenas aspas duplas nos comandos, o que significa que você deve proteger o "
e $
destinados ao awk com barras invertidas.
alias wd='ps -ef | grep java | awk "{print \ \" \" \}" | egrep "(A|B|C|D)"'
Segunda possibilidade: cada caractere se destaca entre aspas simples, exceto que uma aspa simples termina a string literal. '\''
é uma expressão idiomática para “aspas simples dentro de uma sequência de aspas simples”: finalize a sequência de aspas simples, coloque uma aspa simples literal e inicie imediatamente uma nova sequência de aspas simples. Como não há espaço intermediário, ainda é a mesma palavra.
alias wd='ps -ef | grep java | awk '\''{print $2 " " $9}'\'' | egrep "(A|B|C|D)"'
Você pode simplificar isso um pouco:
alias wd='ps -ef | grep java | awk '\''{print $2, $9}'\'' | egrep "(A|B|C|D)"'
Dica: use set -x
para ver como o shell está expandindo seus comandos.
Por que a função não funciona
Eu não sei. A parte que você mostra parece ok. Se você ainda não entender por que sua função não está funcionando depois das minhas explicações, copie e cole seu código.
Alias ou função?
Use um alias apenas para coisas muito simples, geralmente para atribuir um nome mais curto a um comando usado com freqüência ou fornecer opções padrão. Exemplos:
alias grep='grep --color'
alias cp='cp -i'
alias j=jobs
Para algo mais complicado, use funções.
O que você deveria ter escrito
Em vez de analisar a saída ps
, faça com que ela gere a saída mais adequada a você.
wd () {
ps -C java -o pid=,cmd= | egrep "(A|B|C|D)"
}