2016-06-25 7 views
4

den Ruby-docs zu lesen, ist nicht übermäßig hilfreich here:Was macht #tty? auf STDIN bedeuten/in Rubin tun?

Gibt true zurück, wenn ios mit einem Endgerät (tty), falsch sonst verbunden ist.

Ich hatte gehofft, einige zusätzliche Ressourcen oder Erklärungen zu bekommen, um mir zu helfen, dies besser zu verstehen.

Für Kontext, ich bin ein wenig Kommandozeilen-Programm zu schreiben, die entweder einen Dateipfad oder verrohrt Inhalt in den rubin ausführbaren und bin mit #tty? zu bestimmen, was in.

Dank komme akzeptiert!

+1

Auch wenn von einer Konsole (= tty) aufgerufen, muss Ihr Skript möglicherweise noch eine Datei lesen, richtig? Ich schlage vor, Sie verwenden das übergebene Argument als Dateipfad und wenn keine Argumente übergeben werden, lesen Sie von '$ stdin'. Noch besser, verwenden Sie zwei benannte Argumente, wobei einer mit dem Dateinamen parametrisiert ist und der andere angibt, dass die Eingabe von '$ stdin' gelesen werden soll. – Raffael

Antwort

3

Scheint wie http://www.jstorimer.com/blogs/workingwithcode/7766125-writing-ruby-scripts-that-respect-pipelines die prägnanteste Beschreibung dessen, was liefert #tty? tut:

Rubys IO # isatty Methode (mit dem Alias ​​IO # tty?) Wird Ihnen sagen, ob die IO in Frage ein angebracht ist Terminal. Wenn Sie zum Beispiel $ stdout aufrufen, wird beim Pipettieren false zurückgegeben. Hier

ist einige relevante Informationen, dass Sie nützlich finden können:

Hintergrund über Sinn What do pty and tty mean?:

In UNIX ist/dev/tty * ein beliebiges Gerät, das wie ein "Fernschreiber" funktioniert, dh Terminal. (. Genannt Fernschreiber, weil das ist, was wir für die Terminals in den benighted Tagen hatten)

Im Geist der Frage, hier ist ein Beispiel für zu /dev/tty von http://zetcode.com/lang/rubytutorial/io/ schreiben:

#!/usr/bin/ruby 

fd = IO.sysopen "/dev/tty", "w" 
ios = IO.new(fd, "w") 
ios.puts "ZetCode" 
ios.close 
+1

Danke, @SoAwesomeMan. Genau das, was ich wollte - zusätzliche Ressourcen mit etwas Erklärung. – daino3

0

Blick auf, wie grep behandelt diese Situation für den traditionellen UNIX-Ansatz: Keine Datei angegeben? Standard auf $stdin und keine Sorge über TTY-Status, vielleicht möchte jemand in das Terminal einfügen. Wenn ein Dateiname angegeben ist, lesen Sie von diesem und ignorieren Sie STDIN.

Die tty? Funktion ist da, damit Sie wissen können, ob Sie Dinge wie ANSI-Escape-Codes senden sollten, um Ihre Ausgabe zu färben. Es ist im Allgemeinen kein zuverlässiges Signal, wenn jemand über STDIN Eingaben liefern möchte.