Ausgabe ohne File Descriptor?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Lohengrin
Beiträge: 3020
Registriert: 29.08.2004 00:01:05
Wohnort: Montsalvat

Ausgabe ohne File Descriptor?

Beitrag von Lohengrin » 16.10.2018 13:08:32

Ich habe hier folgenden Effekt.

Code: Alles auswählen

$ gpg --full-gen-key >/tmp/x 2>/tmp/y
Please select what kind of key you want:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
Your selection? 
weiterhin

Code: Alles auswählen

$ ls -la /proc/2497/fd
insgesamt 0
dr-x------ 2 bernd bernd  0 Okt 16 11:04 .
dr-xr-xr-x 9 bernd bernd  0 Okt 16 11:04 ..
lrwx------ 1 bernd bernd 64 Okt 16 11:04 0 -> /dev/pts/1
l-wx------ 1 bernd bernd 64 Okt 16 11:04 1 -> /tmp/x
l-wx------ 1 bernd bernd 64 Okt 16 11:04 2 -> /tmp/y
lrwx------ 1 bernd bernd 64 Okt 16 11:04 3 -> /dev/tty
Wie macht man sowas? Und wie kann ich die Ausgabe nach /dev/null befördern?
Harry, hol schon mal das Rasiermesser!

uname
Beiträge: 9536
Registriert: 03.06.2008 09:33:02

Re: Ausgabe ohne File Descriptor?

Beitrag von uname » 16.10.2018 13:32:23

Ich habe keine wirkliche Antwort. Aber vielleicht funktioniert es, wenn du es so automatisiert, dass keine Benutzerinteraktion mehr notwendig ist.

https://serverfault.com/questions/69112 ... nteraction

Benutzeravatar
Livingston
Beiträge: 275
Registriert: 04.02.2007 22:52:25
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: 127.0.0.1

Re: Ausgabe ohne File Descriptor?

Beitrag von Livingston » 16.10.2018 13:42:06

Lohengrin hat geschrieben: ↑ zum Beitrag ↑
16.10.2018 13:08:32

Code: Alles auswählen

$ ls -la /proc/2497/fd
...
lrwx------ 1 bernd bernd 64 Okt 16 11:04 3 -> /dev/tty
Da würde ich zuerst mal versuchen, fd3 umzulenken:

Code: Alles auswählen

$ gpg --full-gen-key >/tmp/x 2>/tmp/y 3>/dev/null
EDIT: Nachtrag
Sehr witzig! Ich habe gerade exakt Dein Beispiel getestet, und bei mir erfolgt keine Abfrage. Ich habe hier das gpg aus jessie am Laufen.

EDIT2: Doch nicht :facepalm:
Meine Version kennt kein --full-gen-key sondern nur --gen-key. Somit landeten in tmp/2 bei mir die entsprechenden Fehlermeldungen.

Benutzeravatar
Lohengrin
Beiträge: 3020
Registriert: 29.08.2004 00:01:05
Wohnort: Montsalvat

Re: Ausgabe ohne File Descriptor?

Beitrag von Lohengrin » 16.10.2018 14:14:15

Livingston hat geschrieben: ↑ zum Beitrag ↑
16.10.2018 13:42:06
Da würde ich zuerst mal versuchen, fd3 umzulenken:
Haut nicht hin.
Ich habe das ls von einem anderen Terminal aus gemacht, in meinem Fall war es /dev/pts1. Wenn ich diesem Terminal aus etwas mit echo "hallo" > /dev/tty schreibe, erscheint es auf dem, wo der Befehl abgesetzt wurde. Vermutlich ist /dev/tty in jedem Terminal etwas anderes, nämlich das eigene.

Mir geht es eigenentlich nicht um --full-gen-key. Das war nur ein Beispiel für etwas, das so lange herum steht, dass ich von woanders mal nachschauen kann, was da die FD sind.
Mein größeres Problem ist --quick-generate-key . Da soll der Benutzer sowieso nichts beeinflussen. Das quasselt mir den Bildschirm voll und ich kriege es nicht weg.

Ich will selber meinen Benutzer etwas fragen, und dann soll das Skript etwas ohne meine Fragerei ausgeben. Auf 1 fragen ist da blöd, und Error ist das nun auch wieder nicht. Ich habe es auf 3 geschrieben und frage auf 1. Dann muss man das Script eben mit einer Umleitung wie 3>Zieldatei ausführen.
Nun gibt es aber anscheinend auch die Möglichkeit etwas auf den Bildschirm zu bringen, ohne dass das auf 1 der auf 2 geht. Ich will das auch können.
Harry, hol schon mal das Rasiermesser!

Benutzeravatar
Lohengrin
Beiträge: 3020
Registriert: 29.08.2004 00:01:05
Wohnort: Montsalvat

Re: Ausgabe ohne File Descriptor?

Beitrag von Lohengrin » 16.10.2018 16:20:22

Wie man das macht, habe ich gerade herausgefunden.
Man holt sich das Terminal, zB von ps. Und dann schreibt man da rein.

Code: Alles auswählen

$ cat test.sh 
#!/bin/bash
device=/dev/$(ps -q $$|sed -ne 's/.*\(pts\/[[:digit:]]*\).*/\1/p')
echo "hallo" >$device
exit 0
$ ./test.sh 1>/dev/null 2>/dev/null
hallo
Bleibt die Frage, wie man das nach /dev/null bekommt, wenn einer sowas macht.
Harry, hol schon mal das Rasiermesser!

Benutzeravatar
Livingston
Beiträge: 275
Registriert: 04.02.2007 22:52:25
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: 127.0.0.1

Re: Ausgabe ohne File Descriptor?

Beitrag von Livingston » 16.10.2018 16:31:01

Ja, /dev/tty ist immer das aktuelle terminal, von dem aus der Prozess gestartet wird. Da dieses durch einen file descriptor (hier also 3) angesprochen wird, sollte es auch umlenkbar sein. Wenn das nicht geschieht, liegt es vermutlich daran, dass das Programm die Umleitung bemerkt, den fd schließt und wieder neu / einen neuen fd öffnet.
Ein Versuch wäre, den Prozess mit nohup zu starten, was ihn vom Terminal ablöst und die Standard- und Fehlerausgabe nach nohup.out umleitet:

Code: Alles auswählen

nohup gpg --full-gen-key
Da für diesen Prozess kein /dev/tty mehr existieren kann sollte das reichen. Ungetestet, keine Gewähr! Siehe auch man nohup

Zu Deinem generellen Problem: Die gpg-manpage nennen auch Optionen wie --batch und und --no-tty. Vielleicht ist das was für Dich.

Benutzeravatar
Lohengrin
Beiträge: 3020
Registriert: 29.08.2004 00:01:05
Wohnort: Montsalvat

Re: Ausgabe ohne File Descriptor?

Beitrag von Lohengrin » 16.10.2018 16:39:10

uname hat geschrieben: ↑ zum Beitrag ↑
16.10.2018 13:32:23
Ich habe keine wirkliche Antwort. Aber vielleicht funktioniert es, wenn du es so automatisiert, dass keine Benutzerinteraktion mehr notwendig ist.

https://serverfault.com/questions/69112 ... nteraction
Wenn man es so wie der macht, hat man noch viel mehr Spaß.
Wenn ich das homedir von gnupg hinerrücks vertausche, verreckt mir gpg-agent. Da hilft dann nur, den gpg-agent abzuschießen. Aber es funktioniert, wenn ich ihm beim Erzeugen eines neuen Schlüssels einen leeren Keyring verpasse. Dann stimmt zwar die trustdb nicht mehr, aber das macht ihm wohl nichts aus.
Es scheint für jedes homedir einen eigenen gpg-agenten zu geben.
Harry, hol schon mal das Rasiermesser!

Benutzeravatar
Lohengrin
Beiträge: 3020
Registriert: 29.08.2004 00:01:05
Wohnort: Montsalvat

Re: Ausgabe ohne File Descriptor?

Beitrag von Lohengrin » 16.10.2018 16:43:25

Livingston hat geschrieben: ↑ zum Beitrag ↑
16.10.2018 16:31:01
Zu Deinem generellen Problem: Die gpg-manpage nennen auch Optionen wie --batch und und --no-tty. Vielleicht ist das was für Dich.
Danke! --no-tty hat geholfen. Für das Vollautomatische reicht das.
Blöd ist das nur, wenn man noch Eingaben vom Benutzer haben will. Mit --full-gen-key weigert gpg sich.

Auf lange Sicht will ich gpg gar nicht mehr benutzen. Mir reicht es, wenn in einem Paket das öffentliche Schlüsselmaterial ist und der Hinweis, welche Algorithmen zu benutzen sind, insbesondere der Hash, weil da kein zu schwacher benutzt werden darf.
Das Paket mit dem öffentlichen Schlüssel hat ja schon einen eindeutigen Namen, nämlich seinen Hash. Wozu braucht dann der, der den dazugehörigen geheimen Schlüssel hat, noch einen anderen Namen?
Ich benutze zur Zeit gpg, weil es funktionert. Den Fingerprint, den Keygrip, die im OpenPGP angegebene Identität, die Signaturen, sogar die Selfsig, brauche ich gar nicht.
Harry, hol schon mal das Rasiermesser!

Antworten