Angenommen, ich muss ein Skript schreiben, das ein Terminal startet und einen Befehl ausführt, und das muss auf verschiedenen Systemen funktionieren. Wie kann ich das sicher und portabel machen?
Wird xterm
immer installiert? Ich gehe davon aus, dass jedes * nix mit einer GUI einen Terminalemulator haben muss. Wie komme ich dorthin? Debian-Systeme haben, x-terminal-emulator
aber das funktioniert anscheinend nicht einmal in Red Hat, geschweige denn in Nicht-Linux-Nixen.
terminal-emulator
portability
terdon
quelle
quelle
expect
expect
? Wie? Indem Sie den Benutzer bitten, sein Terminal einzugeben?Antworten:
Ich glaube nicht, dass du kannst.
xterm
muss nicht überall installiert werden und ist in der Tat wahrscheinlich nicht standardmäßig. Insbesondere, wenn eine Desktop-Umgebung verwendet wird, die ein eigenes Terminal bereitstellt.Ich denke , Ihre beste Wette wahrscheinlich für die Existenz von einigen unterschiedlichen Endgeräten zu prüfen ist (sagen wir
xdg-terminal
,x-terminal-emulator
,gnome-terminal
,konsole
,xterm
). Und vielleicht arbeiten wir daran, dass xdg-terminal tatsächlich zu den FreeDesktop.org-Standards hinzugefügt wird.Dann werden Sie feststellen, dass verschiedene Terminals unterschiedliche Arten haben, Befehle auszuführen, und manchmal sogar unterschiedliche Versionen desselben Terminals ... siehe z. B. Debian Bug # 648271 .
Sie sollten dem Administrator / Benutzer wahrscheinlich auch die Möglichkeit geben, einen benutzerdefinierten Befehl festzulegen. Es wird sicherlich gebraucht.
quelle
case
Aussagen geben würde.xinit
? Das habe ich seit Jahren nicht mehr gemacht, aber das hat früher einen einfachen X-Server mit einem leerenxterm
(?) Fenster geladen, von dem aus Sie Ihre Sitzung starten konnten. Bedeutet das nicht, dass ein Terminalemulator mit X installiert ist?Ja, Sie müssen einen Wrapper verwenden. In i3 WM ist eine gute enthalten. Hier erklärt: http://build.i3wm.org/docs/i3-sensible-terminal.html
Kopieren Sie dies einfach in eine Shell-Funktion in Ihrem Skript: http://code.stapelberg.de/git/i3/tree/i3-sensible-terminal
quelle
which
was eine schlechte Idee ist )