Ich verwende Bash als interaktive Shell und frage mich, ob es eine einfache Möglichkeit gibt, Bash dazu zu bringen, einen Systembefehl anstelle eines in die Shell eingebauten Befehls auszuführen, wenn beide denselben Namen haben.
Verwenden Sie beispielsweise das System kill
(from util-linux
), um die Prozess-ID (pid) der benannten Prozesse zu drucken, anstatt ein Signal zu senden:
$ /bin/kill -p httpd
2617
...
Ohne Angabe des vollständigen Pfads des Systembefehls wird anstelle des Systembefehls der integrierte Bash verwendet. Das kill
eingebaute Programm hat keine -p
Option, daher schlägt der Befehl fehl:
$ kill -p httpd
bash: kill: p: invalid signal specification
Ich habe versucht, die in Make bash aufgelisteten Antworten mit einem externen `time` -Befehl anstatt mit einer eingebauten Shell zu beantworten, aber die meisten funktionieren nur, weil time
es sich tatsächlich um ein Shell- Schlüsselwort handelt - nicht um eine eingebaute Shell .
Abgesehen von enable -n kill
der vorübergehenden Deaktivierung der Bash-Funktion ist die beste Lösung, die ich bisher gesehen habe, Folgendes :
$(which kill) -p httpd
Gibt es andere einfachere (weniger tippende) Möglichkeiten, einen externen Befehl anstelle einer eingebauten Shell auszuführen?
Beachten Sie, dass dies kill
nur ein Beispiel ist und ich eine verallgemeinerte Lösung möchte , die der Art und Weise ähnelt, in der das command
Präfix mit dem eingebauten Befehl verhindert, dass Funktionen mit demselben Namen wie ein externer Befehl ausgeführt werden. In den meisten Fällen bevorzuge ich in der Regel die integrierte Version, da dadurch ein neuer Vorgang nicht ausgelöst werden kann und in einigen Fällen Funktionen vorhanden sind, die der externe Befehl nicht unterstützt.
$(…)
- sehen Sie dies , dies und das .
which kill
Einfügen von Backticks (kann nicht kommentiert werden) ist etwas kürzer.