Wie kann ich überprüfen, ob ein Perl-Skript in einem terminal?

Ich bin versucht zu bestimmen, innerhalb ein Perl-Skript unter Linux, ob es läuft in einem terminal.

Ist, muss ich code:

  • gibt true zurück, wenn einfach ausführen auf der Kommandozeile
  • auch true zurück, wenn ausgeführt ./myscript.pl | less oder sogar ./myscript.pl </dev/null >/dev/null 2>/dev/null
  • gibt false zurück, wenn die Ausführung in einem cron-job, oder als ein CGI-Skript

Besonders, weil die zweite Kugel, die ich nicht benutzen kann -t STDOUT und Variationen, und auch IO::Interaktive ist von keinerlei nutzen.

Den Informationen nicht angezeigt werden, zur Verfügung. Wenn ich ps ist, zeigt es einen Eintrag wie pts/2 im TTY Spalte, auch wenn ich ./myscript.pl </dev/null >/dev/null 2>/dev/null, und ? bei Ausführung als cron-job oder CGI-Skript.

Gibt es einen eleganten Weg, um zu bestimmen, dieses in ein Perl-Skript? Ich möchte lieber nicht analysieren die Ausgabe von ps.

  • Ich denke, dass perl zur Verfügung hat isatty(3) Funktion.
  • isatty besteht in der POSIX-Modul, ja, aber, wie -t, prüft, ob eine Datei-handle verbunden ist, um ein tty. Nicht das, was ich brauche...
  • Ist die ctermid - Funktion zur Verfügung?
  • ctermid ist, existiert tatsächlich in der POSIX-Modul. Leider gibt es /dev/tty/ auf der Kommandozeile als auch in einem cron-job.
  • Wie wäre es mit einer alternative Methode, die nicht mit tty-Erkennung? Setzen Sie einen besonderen Umgebungsvariable in deine crontab und das script testen.
  • Ich könnte das machen, ja; aber ich habe bereits mehrere Möglichkeiten, um zuverlässig tun tty-Erkennung, also ich werde mit dem stick. 🙂

InformationsquelleAutor mscha | 2011-08-05
Schreibe einen Kommentar