Uso Bash come shell interattiva e mi chiedevo se esistesse un modo semplice per far eseguire a Bash un comando di sistema invece di un comando incorporato della shell nel caso in cui entrambi condividessero lo stesso nome.
Ad esempio, utilizzare il sistema kill
(da util-linux
) per stampare l'ID di processo (pid) dei processi denominati anziché inviare un segnale:
$ /bin/kill -p httpd
2617
...
Senza specificare il percorso completo del comando di sistema, al posto del comando di sistema viene utilizzato l'integrato di Bash. Il kill
builtin non ha l' -p
opzione quindi il comando fallisce:
$ kill -p httpd
bash: kill: p: invalid signal specification
Ho provato le risposte elencate in Fa in modo che bash usi il comando `time` esterno piuttosto che la shell integrata, ma la maggior parte di esse funziona solo perché in time
realtà è una parola chiave della shell , non una shell incorporata .
Oltre a disabilitare temporaneamente Bash integrato con enable -n kill
, la migliore soluzione che ho visto finora è usare:
$(which kill) -p httpd
Esistono altri modi più semplici (implicano meno battitura) di eseguire un comando esterno invece di un comando incorporato della shell?
Si noti che kill
è solo un esempio e vorrei una soluzione generalizzata simile al modo in cui il prefisso con l' command
integrato impedisce l'esecuzione di funzioni con lo stesso nome di un comando esterno. Nella maggior parte dei casi, di solito preferisco usare la versione integrata in quanto consente di salvare il fork di un nuovo processo e alcune volte l'integrato ha funzionalità che il comando esterno non ha.
$(…)
: vedi questo , questo e questo .
which kill
in backtick (non è possibile inserirlo nei commenti) è leggermente più breve.