Bindestrich nach 'vim' -> tail -10 /var/log/syslog | vim -

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
bumer
Beiträge: 238
Registriert: 02.07.2014 12:29:15

Bindestrich nach 'vim' -> tail -10 /var/log/syslog | vim -

Beitrag von bumer » 29.09.2016 20:58:39

Hallo,

wofür steht der Bindestrich nach 'vim':

Code: Alles auswählen

tail -10 /var/log/syslog | vim -
Steht der Bindestrich für den ersten Kanal (stdin)? Und wieso geht es nicht ohne? Habe das Konstrukt schon öfter gesehen, es aber nie so richtig verstanden.

Viele Grüße,
bumer

Benutzeravatar
4A4B
Beiträge: 962
Registriert: 09.11.2011 11:19:55
Kontaktdaten:

Re: Bindestrich nach 'vim' -> tail -10 /var/log/syslog | vim

Beitrag von 4A4B » 29.09.2016 21:33:54

Steht der Bindestrich für den ersten Kanal (stdin)?
Ja, so steht es zumindest in der Manpage:
- The file to edit is read from stdin. Commands are read from stderr, which should be a tty.
Und wieso geht es nicht ohne?
Hinter dem "-" folgen keine weiteren Optionen mehr, ohne dem "-" würde vim vermutlich versuchen, die Standardeingabe als eine Abfolge von Optionen und Dateinamen zu interpretieren

Benutzeravatar
Meillo
Moderator
Beiträge: 9233
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Bindestrich nach 'vim' -> tail -10 /var/log/syslog | vim

Beitrag von Meillo » 29.09.2016 22:09:40

Die Angabe ``-'' statt eines Dateinamens fuehrt bei vielen Tools dazu, dass sie statt einer Datei stdin verwenden.

Siehe z.B. in der Manpage von cat(1):

Code: Alles auswählen

       With no FILE, or when FILE is -, read standard input.

EXAMPLES
       cat f - g
              Output f's contents, then standard input, then g's
              contents.
Edit: Aber nicht alle Tools verhalten sich so. Beispielsweise bedeutet ``-'' im originalen ed(1), dass die Byte-Ausgaben beim Lesen und Schreiben unterdrueckt werden. (In modernen Versionen hat man das durch ``-s'' ersetzt.) Und auch sonst, die Unterstuetzung von ``-'' zum Lesen von stdin ist eine Implementierungsentscheidung des Programms, nicht der Shell oder so.
Use ed once in a while!

Benutzeravatar
4A4B
Beiträge: 962
Registriert: 09.11.2011 11:19:55
Kontaktdaten:

Re: Bindestrich nach 'vim' -> tail -10 /var/log/syslog | vim

Beitrag von 4A4B » 30.09.2016 07:00:57

Meillo hat geschrieben:Edit: Aber nicht alle Tools verhalten sich so. Beispielsweise bedeutet ``-'' im originalen ed(1), dass die Byte-Ausgaben beim Lesen und Schreiben unterdrueckt werden. (In modernen Versionen hat man das durch ``-s'' ersetzt.) Und auch sonst, die Unterstuetzung von ``-'' zum Lesen von stdin ist eine Implementierungsentscheidung des Programms, nicht der Shell oder so.
Ein weiteres Beispiel: das Shell-Builtin cd interpretiert '-' als $OLDPWD

Antworten