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 killeingebaute Programm hat keine -pOption, 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 timees sich tatsächlich um ein Shell- Schlüsselwort handelt - nicht um eine eingebaute Shell .
Abgesehen von enable -n killder 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 killnur ein Beispiel ist und ich eine verallgemeinerte Lösung möchte , die der Art und Weise ähnelt, in der das commandPrä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 killEinfügen von Backticks (kann nicht kommentiert werden) ist etwas kürzer.