Se você tivesse usado zsh ou (t)csh em vez de bash , teria entendido seu erro:
$ ps -ef | grep [c]ron
zsh: no matches found: [c]ron
Acima, você tem um padrão globbing que deve ser expandido para a lista de arquivos no diretório atual que corresponde a esse padrão.
Na maioria dos shells parecidos com Bourne e rc, no entanto, se não houver nenhum arquivo correspondente, o padrão é silenciosamente passado intocado para o comando.
É por isso que funciona com [c]ron , porque não há nenhum arquivo chamado cron no diretório atual, mas não com [a]2draw , porque há um arquivo correspondente a esse padrão no diretório atual, ele é expandido por o shell para a2draw e grep obtém um argumento a2draw em vez de [a]2draw .
Observe que bash pode ser configurado para funcionar como zsh , nesse caso:
shopt -s failglob
O shell fish também relata um erro quando um glob não corresponde. No entanto, [...] não é um operador globbing em fish .
O que isso significa é que você precisa citar os caracteres globbing quando não pretende que sejam expandidos:
ps -ef | grep '[a]2draw'
Você pode sair sem fazer isso em bash ou outros shells parecidos com Bourne, exceto zsh , mas isso faz com que bugs inativos estejam prontos para serem acionados no dia em que você executar o comando em um diretório que tenha um arquivo correspondente.
Eu posso ter efeitos colaterais desagradáveis, como em contextos insuspeitados. Como:
rm -?
Em um diretório que tenha arquivos chamados -- , -x e -y removerá os dois -x e -y .