Beiträge von Sojan im Thema „Zenity: Shell-Menüs einfach erstellt“

    Noch kurze Frage:

    wiso geht eig. "~/myscript/myfunctions.sh rsyncmmc" \ nicht?

    Muss immer "/home/gonzo/myscript/myfunctions.sh rsyncmmc" \ angeben :/

    Nur eine Vermutung: Es wird ein Subprozess gestartet, der keinen Bezug zu deiner Shell hat. Entsprechend kann der Prozess auch nichts mit "~" anfangen.

    Ich würde stattdessen die Shell-Variable $HOME nutzen. Kannst ja mal echo $HOME im Terminal eingeben.

    Also "$HOME/myscript/myfunctions.sh rsyncmmc"

    Hätte auch den Vorteil, falls du dich einmal umbenennen solltest, nicht alle Scripte abändern zu müssen. :)

    Gonzo-3004

    Damit nicht für jeden kleinen Befehl ein eigenes Script erstellt werden muss, kannst du auch mit Funktionen arbeiten

    Wieder die ./update.sh

    Die Angabe vor dem () ist der Funktionsname und kann beliebig gewählt werden. In den geschweiften Klammern kommen dann die Kommandos rein. Und am Ende darf "$@" nicht fehlen.

    Die Funktionen lassen sich dann mit Script-Name und Funktionsname aufrufen, also ./update.sh bash_df oder ./update.sh bash_lsblk usw.

    In meinem Zenity Shell Menü will folgender Befehl nicht funktionieren:

    "System" "Verwaiste Pakete löschen" "pacman -Qtdq | sudo pacman -Rns -" \

    Fehlermeldung im Terminal: Fehler: Es sind nicht mehrere Operationen gleichzeitig erlaubt

    Führe ich den Befehl direkt im Terminal aus läuft der ohne Probleme durch :thumbup:

    Hat jemand eine Idee woran's liegen könnte?

    Der Fehlerhinweis kommt mir bekannt vor :)

    Habe mir damit beholfen, dass ich ein kleines Script mit den Befehlen erstellt habe und dieses von Zenity aus starte.

    Beispiel-Script (update.sh):

    Bash
    #!/bin/bash
    sudo pacman -Syu
    yay -Ps
    df -h

    Zenity

    Code
    ...
    "Test" "Aus dem Linux-Guides-Forum" "./update.sh" \
    ...

    Gerade noch etwas rumgespielt. Es lassen sich auch verschiedene Felder miteinander kombinieren.

    • Kalender
    • Textfeld
    • Liste
    • Combo

    Als Einzeiler zum Ausprobieren im Terminal:

    Code
    zenity --width=400 --forms --title="Mein erstes Formular" --text="Abfrage" --add-calendar="Datum" --add-entry="Freitext" --add-list="Vorgang" --show-header --column-values="ID|Beschreibung" --list-values="1|Fall 1|2|Fall 2|3|Fall 3|4|Fall 4" --add-combo="Auswahl 1" --combo-values="Typ A|Typ B|Typ C" --add-combo="Auswahl 2" --combo-values="Typ 1|Typ 2|Typ 3" --forms --add-combo="Auswahl 3" --combo-values="Typ A|Typ B|Typ C" --add-combo="Auswahl 4" --combo-values="Typ 1|Typ 2|Typ 3"

    Der Rückgabewert des Formulars sieht dann so aus:

    Code
    01.02.2023|Keinen weiteren Text|2,Fall 2,|Typ A|Typ 2|Typ C|Typ 3

    Super Sache :)

    Ich habe das Script probiert und das Menü öffnet sich auch :thumbup:

    Wenn ich z.B. Htop starten möchte bekomme ich aber eine Fehlermeldung.

    Versuch mit Alacritty:

    alacritty --command="bash -c '$OUT' "

    Habe es mit Alacritty in der VM getestet

    Code
    alacritty --hold --command $OUT

    --hold bewirkt, dass das Fenster nach dem Befehl geöffnet bleibt.

    Mit Zenity lassen sich schnell und einfach Menüs erstellen.

    So kann es dann aussehen.

    Ich wollte das Aufrufen von Befehlen und Starten von Scripts möglichst an einem Ort zusammenfassen. Und am Besten bequem aus einer GUI heraus.

    Dazu reicht ein simples Script, dass schon fast selbsterklärend ist.

    • zuerst Größe und Titel des Fensters
    • dann die Spalten definieren - hier 3 Stück (--column )
    • anschließend werden die drei Spalten befüllt
    • von der ausgewählten Zeile wird der dritte Wert der Variablen "OUT" übergeben - was in diesem Beispiel der Befehl ist
    • der gespeicherte Befehl in der Variablen "OUT" wird zum Schluss im Terminal (hier Gnome-Terminal) ausgeführt.

    Damit das Gnome-Terminal sich nach einem Befehl nicht gleich wieder schließt, muss in den Einstellungen noch etwas vorgenommen werden.

    Grundsätzlich lässt sich das auch mit Aliases realisieren, aber so mit GUI finde ich es cooler. :)