Stdin-Eingabeverhalten zwischen „cat“ und „less“

Stdin-Eingabeverhalten zwischen „cat“ und „less“

Wenn ich eingebe cat, bleibt das Terminal hängen und wartet auf die Eingabe von stdin. Wenn jedoch lessausgegeben wird, erhalte ich Missing filename ("less --help" for help). Es ist bekannt, dass sowohl als lessauch catstdin-Eingaben akzeptieren. Was ist der Unterschied? Wie wird dies in den Manpages wiedergegeben?

Antwort1

lessführt den folgenden Code aus, wenn keine Dateinamenargumente angegeben sind:

if (isatty(fd0))
{
    error("Missing filename (\"less --help\" for help)", NULL_PARG);
    quit(QUIT_OK);
}
return (edit("-"));

Es beschwert sich, wenn die Standardeingabe ein Terminal ist. Wenn die Standardeingabe eine normale Datei oder Pipe ist, ist das in Ordnung.

Dies geschieht vermutlich, weil am Ende jeder Seite die Antworten vom Terminal gelesen werden müssen und es keine Möglichkeit gäbe, zwischen den ausgelagerten Daten und den Antworten zu unterscheiden.

Dies wird auf der Manpage nicht erwähnt. Vielleicht sollte es das.

catgibt seine Ausgabe nicht aus und liest keine Antworten vom Terminal. Es gibt keine Einschränkungen, da stdin ein Terminal ist.

Antwort2

Ich vermute, dass dies auf Dateideskriptor 0 lessabzielt . Eine andere Alternative wäre , Dateideskriptor 0 aufzurufen und die Werte der Felder und zu interpretieren . In jedem Fall ist der Punkt, dass ein Programm etwas über einen Dateideskriptor sagen kann und stdin einfach Dateideskriptor 0 ist.isatty(3)fstat(2)st_inost_rdev

Was die Gründe für das lessBeenden und catdas Nichtbeenden betrifft, müssen Sie sich den Zweck der beiden unterschiedlichen Programme ansehen. lessist der GNU-Pager, eine Reaktion auf den BSD-Pager more(beachten Sie den witzigen Namen). Es macht nicht unbedingt Sinn, Eingaben von einem Terminal zu paginieren, aber es könnte durchaus Sinn machen, Eingaben von einer Pipe zu paginieren. Beides könnte stdin sein. Das Codieren eines Sonderfalls in lessmacht Sinn. Das Codieren eines Sonderfalls in catmacht keinen Sinn und verringert seine Nützlichkeit. Sogar in den späten 1980er Jahren hatten die Leute Fenstersysteme und tippten cat > somefileeinen großen Textblock ein und fügten ihn dann in „somefile“ ein.

verwandte Informationen