Desktop-Launcher für rsnapshot: Welcher Befehl lässt Terminal nach Ausführung geöffnet?

Werner

Member
Die Festlatte für Backups ist in einem Wechselschacht und lässt sich an und ausschalten.
Die Backups sollen nicht zeitgesteuert erfolgen, sondern manuell gestartet werden.
Dafür möchte ich Launcher (xy.desktop) anlegen für Mount, Backup und Unmount (via Terminal) und diese in Plank oder ins Menü einbinden.

Das funktioniert gut mit diesen Befehlen:
Code:
xfce4-terminal --geometry=60x18 --title=mount-zbup -e "sudo -H zfs mount zb/zbup"
xfce4-terminal --geometry=120x44 --title=rsnapshot_home -e "rsnapshot -v alpha"
xfce4-terminal --geometry=60x18 --title=unmount-zbup -e "sudo -H zfs unmount zb/zbup"

Doch die Terminalfenster schließen sofort nach Ausführung. Aber ich möchte bei rsnapshot gerne sehen, ob und was kopiert wurde. Das Terminal sollte deshalb erst nach einer Tasteneingabe (z.B. <Enter>) schließen.

FreeBSD ist neu für mich und sh scheint anders zu funktionieren als Linux-bash. Folgender Befehl funktioniert nicht, aber ich vermute so ähnlich müsste es gehen:
Code:
xfce4-terminal --geometry=120x44 --title=rsnapshot_home -e "rsnapshot -v alpha; echo '<Enter> to Close Terminal'; read line"
Wo liegt mein Fehler? Sind die Argumente -e und -H korrekt?
Wie kann ich etwas wie "echo '<Enter> to Close Terminal'; read line" an funktionierende Befehle anfügen?
Gibt es irgendwo eine verständliche Anleitung zur sh?
 
weil ich das alles nicht weiß, kann ich nur dies beisteuern: vielleicht geht das ja mit einer bash und die kannst du ja auch in FreeBSD installieren und benutzen.
 
Warum nicht einfach nen (ksh?) Script schreiben und lieber das aufrufen antelle das über sonnen terminal-app-fenster-aufruf zu machen?
 
Hallo Werner,

Du kannst beim xfce4-terminal einstellen, ob es nach Ausführung des Befehls offen bleibt. In den Einstellungen ist dafür ein Häkchen notwendig.

Beste Grüße
Jonas
 
@ Jonas

danke. Meinst Du die Option "Fenster offen lassen, wenn es den Fokus verliert" ? Das macht leider keinen Unterschied.

Mein Problem scheint mein Unwissen zu sein, wie sh umgeht mit
echo '<Enter> to Close Terminal'; read line

Gebe ich das ins geöffnete Terminal ein, funktioniert es wie es soll:
Code:
$ echo '<Enter> to Close Terminal'; read line
<Enter> to Close Terminal

$
Doch wie hänge ich das an meinen Befehl.

Unter Linux funtioniert es z.B. so
Code:
xfce4-terminal --geometry=60x18 --title=mount_zbup -e bash -c "sudo -H zfs mount zb/zbup; echo '<Enter> to Close Terminal'; read line"
bzw.
xfce4-terminal --geometry=120x44 --title=rsnapshot_home -e bash -c "rsnapshot -v alpha; echo '<Enter> to Close Terminal'; read line"
Doch einfach bash durch sh ersetzen klappt nicht und bei -c meckert sh.
Was unter Linux möglich ist sollte irgenwie auch unter FreeBSD gehen, nur wie?
 
Doch einfach bash durch sh ersetzen klappt nicht und bei -c meckert sh.
Was unter Linux möglich ist sollte irgenwie auch unter FreeBSD gehen, nur wie?
Es muss tatsächlich nicht alles das, was unter GNU/Linux geht, auch unter FreeBSD gehen. GNU ist eben doch was anderes, hat zusätzliche Tools und auch dort, wo sie gleich heißen, können sie durchaus unterschiedlich ausfallen. So unterscheidet sich zB FreeBSD cp(1) durchaus von GNU cp oder etwa sed ist auch deutlich unterschiedlich. Nimmt man nun ein Script, das unter GNU/Linux funktioniert, kann es durchaus in FreeBSD scheitern (auch, wenn man die unterschiedlichen Pfade anpasst) und natürlich auch umgekehrt.
Ein häufiger Punkt für Probleme ist die Standard-Shell in der Linux-Welt: die BASH.
Mir ist die bash immer zu groß gewesen und zu komplex. Deshalb konnte ich mich damit nicht anfreunden und blieb bei der Standard-Shell von FreeBSD, der CSH (TCSH). Mir ist die angenehmer.
Es gibt aber auch die Möglichkeit, die bash in FreeBSD zu installieren und sie zu nutzen.

Der Aufruf, den du oben versuchst, scheint mir doch gezielt eine Eigenschaft der bash aufzurufen. Das dies mit einer sh nicht gelingt, ist eher wahrscheinlich als merkwürdig. Ob es mit der "FreeBSD-bash" gelingen wird, musst du vielleicht einfach mal ausprobieren. Die Chancen sind jedenfalls schon mal deutlich größer.
Dazu musst du die bash halt installieren und beachten, dass sie in FreeBSD nicht zum Basis-System gehört, also irgendwo unter /usr/local liegen wird.
 
Mein Problem scheint mein Unwissen zu sein, wie sh umgeht mit
echo '<Enter> to Close Terminal'; read line

Gebe ich das ins geöffnete Terminal ein, funktioniert es wie es soll:
Code:
$ echo '<Enter> to Close Terminal'; read line
<Enter> to Close Terminal

$
Doch wie hänge ich das an meinen Befehl.

Unter Linux funtioniert es z.B. so
Code:
xfce4-terminal --geometry=60x18 --title=mount_zbup -e bash -c "sudo -H zfs mount zb/zbup; echo '<Enter> to Close Terminal'; read line"
bzw.
xfce4-terminal --geometry=120x44 --title=rsnapshot_home -e bash -c "rsnapshot -v alpha; echo '<Enter> to Close Terminal'; read line"
Doch einfach bash durch sh ersetzen klappt nicht und bei -c meckert sh.
Was unter Linux möglich ist sollte irgenwie auch unter FreeBSD gehen, nur wie?


Villeicht mal nen gewagter Take, ich nutze kein FreeBSD.

Im aufruf über das Terminal rufst du explizit die "SH" auf, eine sehr reduzierte shell., und wenn due es im Terminal direkt machst wird ja die CSH (TCSH) verwendet, die wesentlich mehr "kann". Versuch doch mal anstelle der der SH die CSH oder so :)
 
Habe gerade nur ein Linux (Xfce) bei der Hand, aber wenn sich das Fenster so schnell wieder schließt, ist eher die Zeile fehlerhaft.
Das xfce4-terminal nimmt lt. Manpage nur einen Befehl entgegen, daher hier eine Lösung über eine weitere Shell.
(Man kann es unschön auch in das Xfce-Starter Fenster kopieren)

Code:
#!/bin/sh

# Da die Zeichen " und ' schon in Verwendung sind, kann man sie so einfach kein
# weiteres mal verwenden und muesste daher auf Satz-Leerzeichen bei echo <...>
# verzichten. Jedoch gibt es dann noch zumindest diese beiden Moeglichkeiten:

# Escapes
xfce4-terminal --geometry=120x44 --title=rsnapshot_home -e '/bin/sh -c " \
    echo Starte...\\\n; \
    rsnapshot -v alpha; \
    echo \\\n\<Enter\>\ to\ Close\ Terminal; \
    read line"'

# cat << EOT
xfce4-terminal --geometry=120x44 --title=rsnapshot_home -e '/bin/sh -c "\
    echo Starte...; \
    echo; \
    rsnapshot -v alpha; \
# EOT jedenfalls ohne Einrueckung und alleine in Zeile!
cat << EOT

<Enter> to Close Terminal
EOT
    read line"'
 
...
Es gibt aber auch die Möglichkeit, die bash in FreeBSD zu installieren und sie zu nutzen.

Der Aufruf, den du oben versuchst, scheint mir doch gezielt eine Eigenschaft der bash aufzurufen. Das dies mit einer sh nicht gelingt, ist eher wahrscheinlich als merkwürdig. Ob es mit der "FreeBSD-bash" gelingen wird, musst du vielleicht einfach mal ausprobieren. Die Chancen sind jedenfalls schon mal deutlich größer.
Dazu musst du die bash halt installieren und beachten, dass sie in FreeBSD nicht zum Basis-System gehört, also irgendwo unter /usr/local liegen wird.

Manche Anwendungen benötigen die bash in /bin oder gmake unter dem Namen make. Falls man root Zugang hat, einfach bash nach /bin linken - oder folgendes - das geht als normaler User :) Erzeuge das Verzeichnis /home/username/bin, setze da links hinhein wie bash -> /usr/local/bin/bash und make -> /usr/local/bin/gmake und plaziere /home/username/bin ganz vorne in PATH. Evtl. packe das setting direct in .tcshrc, .cshrc oder .bashrc. :) VG Norbert :)
 
Danke an Euch alle für Eure Unterstützung.

Die Lösung ist so einfach: xfce4-terminal ist das Problem! Der entscheidene Hinweis kam von clearness:
"Das xfce4-terminal nimmt lt. Manpage nur einen Befehl entgegen"

Mit lxterminal funktionieren meine Desktop-Launcher mit folgenden Befehlszeilen:
Code:
lxterminal --geometry=80x16 --title=mount-zbup -e "sudo -H zfs mount zb/zbup; echo '<Enter> to Close Terminal'; read line"

lxterminal --geometry=120x44 --title=rsnapshot_home -e "rsnapshot -v alpha; echo '<Enter> to Close Terminal'; read line"

lxterminal --geometry=80x16 --title=unmount-zbup -e "sudo -H zfs unmount zb/zbup; echo '<Enter> to Close Terminal'; read line"


Mit sh lassen sich solche Routinebefehle also doch bequem übers Menü ausführen.
Da so das Terminal nicht automatisch nach Ausführung schließt, erhält man ggf. eine Fehlermeldung – zum Beispiel:
Code:
Passwort:
cannot unmount '/media/zbup': Device busy
<Enter> to Close Terminal
 
Hallo Gemeinde,

es ist beeindruckend welche Möglichkeiten für ein doch recht triviales Problem gefunden werden. Aus dem obigen Link, ein Auszug.

Für das xterm würde die Lösung wie folgt aussehen:

xterm -hold -e $SKRIPT

Für das xfce4-terminal:

xfce4-terminal -H -e '$SKRIPT'

Auch die manpages vom xfce4-terminal, gibt eine entsprechende Auskunft. Hier auf deutsch.


Viel Spass und beste Grüße
Jonas
 
@ Jonas
"xfce4-terminal -H" ist in diesem Fall keine Lösung.
Ja, das Terminal bleibt geöffnet, aber nach Ausführung wird es leer, schwarz, zeigt nichts an.
Man muss es dann auch extra schließen.
Für eine Rückmeldung braucht man etwas wie "echo 'xy'; read line", doch dem steht die Limitierung von xfce4-terminal auf nur einen Befehl im Wege.
 
Hallo Werner,

probiere es doch einfach mal mit einem xterm. :)

Vielleicht könnte auch jemand anders, der xfce nutzt, den Befehl probieren. Vielleicht liegt der Fehler (Terminal bleibt schwarz) auch woanders.

Beste Grüße
Jonas
 
@ Jonas
xterm und lxterminal funktionieren beide so, wie unter #11 dargelegt.
Als Standard-Terminal-Emulator finde ich LXterminal komfortabler.

Angesichts der Dateigröße von xfce4-terminal (2MB) gegenüber lxterminal (0,4MB) frage ich mich:
Bietet mir xfce4-terminal irgendwelche Vorteile oder ist es bloß ein Anchronismus von XFCE?
 
Hallo Werner,

ob dir xfce4-terminal irgendwelche Vorteile bietet, kann ich nicht beantworten. :-) Ich selbst nutze das xterm. Letztendlich ist das gewählte Terminal, nur eine Schnittstelle zur jeweils genutzten Shell.

Wenn es mit dem xterm und dem lxterminal funktioniert, ist es naheliegend, eines der beiden für dein Vorhaben zu nutzen. :-)

Beste Grüße
Jonas
 
Letztendlich ist das gewählte Terminal, nur eine Schnittstelle zur jeweils genutzten Shell.
ich verliere mich auch nicht gerne in dem Dschungel aller möglichen Terminals und landete vor Jahren mal bei:
Code:
rxvt-unicode-9.22_1            Clone of the terminal emulator rxvt modified to support Unicode
Weil es damals UTF gut unterstützte und einen eigenen Transparenz-Modus bietet, blieb ich dabei. Eine Desktop-unabhängige Variante. Und obwohl ich selbst es auch nur in dem oben genannten Sinne nutze, kann es doch sehr viel mehr.
Das soll nun weder Kritik an Gesagtem, noch als Empfehlung gemeint sein, vielleicht eine Ergänzung.
 
Zurück
Oben