Unter MacOS 10.14 wird whatisein nicht installierter Befehl 'command': nothing appropriatewie erwartet gedruckt . Es wird jedoch 0 anstelle eines Fehlercodes zurückgegeben, der meines Erachtens das erwartete Verhalten darstellt. Es ist auch nicht konsistent mit man, was 1 zurückgibt, wenn keine Ergebnisse vorliegen. Darüber hinaus wird whatisauf stdout mangedruckt , während auf stderr gedruckt wird.
Dies unterscheidet sich von Linux, das einen Fehlercode zurückgibt und an stderr druckt.
Mac OS:
$ whatis abc; echo $?
abc: nothing appropriate
0
$ man abc; echo $?
No manual entry for abc
1
$ whatis abc 2>/dev/null
abc: nothing appropriate
$ man abc 2>/dev/null
Linux (Ubuntu):
$ whatis abc; echo $?
abc: nothing appropriate.
16
$ man abc; echo $?
No manual entry for abc
16
$ whatis abc 2>/dev/null
$ man abc 2>/dev/null
Ich glaube, whatissollte nicht 0 zurückgeben, wenn es keine Beschreibung des Befehls finden kann, und sollte ein Verhalten haben, das mit übereinstimmtman
Hinweis: Dies ist mir aufgefallen, weil ich ein Programm schreibe, das auf dieser Funktionalität basiert
Bearbeiten: aproposhat das gleiche Verhalten wiewhatis
whatisist es kompiliert, daher können wir keine ähnliche Analyse durchführen. Ich würde argumentieren, dass das Verhalten von macOS dem von Linux unterlegen ist. Es scheint klar, dass der Versuch, Informationen über einen nicht vorhandenen Befehl abzurufen, einen Fehler zurückgeben sollte.which abcgibt 1 zurück,man abcgibt 1 zurück usw. Obwohl dieswhatisnicht Teil von POSIX ist, kann ich nicht sagen, dass Apples Implementierung "falsch" ist, aber ich sehe keine Vorteile darin, 0 zurückzugeben und auf stdout auszugeben.