Unter MacOS 10.14 wird whatis
ein nicht installierter Befehl 'command': nothing appropriate
wie 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 whatis
auf stdout man
gedruckt , 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, whatis
sollte 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: apropos
hat das gleiche Verhalten wiewhatis
whatis
ist 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 abc
gibt 1 zurück,man abc
gibt 1 zurück usw. Obwohl dieswhatis
nicht 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.