Eu uso o Bash como meu shell interativo e fiquei imaginando se havia uma maneira fácil de fazer com que o Bash execute um comando do sistema em vez de um comando interno do shell no caso em que ambos compartilham o mesmo nome.
Por exemplo, use o sistema kill
(de util-linux
) para imprimir o ID do processo (pid) do (s) processo (s) nomeado (s) em vez de enviar um sinal:
$ /bin/kill -p httpd
2617
...
Sem especificar o caminho completo do comando do sistema, o Bash interno é usado em vez do comando do sistema. O kill
builtin não tem a -p
opção, portanto, o comando falha:
$ kill -p httpd
bash: kill: p: invalid signal specification
Tentei as respostas listadas em Faça com que o bash use o comando externo `time` em vez do shell interno, mas a maioria deles funciona apenas porque time
é na verdade uma palavra - chave shell - não um shell embutido .
Além de desabilitar temporariamente o Bash enable -n kill
, a melhor solução que vi até agora é usar:
$(which kill) -p httpd
Existem outras maneiras mais fáceis (envolvem menos digitação) de executar um comando externo em vez de um shell embutido?
Observe que kill
é apenas um exemplo e eu gostaria de uma solução generalizada semelhante à maneira como o prefixo com o command
builtin impede que funções com o mesmo nome de um comando externo sejam executadas. Na maioria dos casos, eu geralmente prefiro usar a versão embutida, pois economiza a bifurcação de um novo processo e, algumas vezes, o embutido possui recursos que o comando externo não possui.
$(…)
- veja isto , isto e aquilo .
which kill
de backticks (não é possível colocá-los nos comentários) é um pouco menor.