GELÖST: Bash-Script mit Dialog

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
gbotti
Beiträge: 846
Registriert: 16.07.2010 14:24:43
Wohnort: München

GELÖST: Bash-Script mit Dialog

Beitrag von gbotti » 29.04.2015 09:00:05

Hallo.

Ich habe ein Bash-Script vor mir, das mit dialog erweitert werden soll um es komfortabler zu machen. Das Problem, mit dem ich kämpfe hat etwas mit Escaping zu tun, und ich sehe gerade wohl den Wald vor lauter Bäumen nicht. Vielleicht kann mir hier bitte jemand auf die Sprünge helfen.

Der Part, um den es geht, sieht so aus:

Code: Alles auswählen

HEADERS=$(git log origin/master --pretty=format:'"%H" * "%s"' -5 --abbrev-commit)
                while read -r HEADER; do
                        IFS='*' read var1 var2 <<< $HEADER
                        options+=($var1 $var2)
                        echo "1 --- $var1"
                        echo "2 --- $var2"
                        #sleep 3
                        echo "atoptions =  ${options[@]}"
                        echo "optins = $options"

                done <<< "$HEADERS"
                cmd=(dialog --menu 'Welchen Header soll ich verwenden?' 0 0 8)
                command=$(echo "${cmd[@]}" "${options[@]}" "2>file")
                $command
Es sollen also in einem dialog -menu die letzten 5 Git-Heads angezeigt und ausgewählt werden können. So weit komme ich aber nicht, denn das Escaping "zerstört" mir den Befehl. Mit set -x habe ich folgende Ausgabe für den Befehl gekriegt:

Code: Alles auswählen

command='dialog --menu Welchen Header soll ich verwenden? 0 0 8 "d9f88604fe3fd0e80fd61f8cc4729b547138b7ef" "Merge remote-tracking branch '\''origin/master'\''" "a088a2430922921b5fc98a83be3fb85dc16a749b" "Shipping '\''2900'\'' auf '\''0'\'' gesetzt" "9acb80b64e43032e8be22062571ce8654dfdaf0a" "Version 3.1" "954b1140a2244bac0cd6dcc2a98b17d073214a4e" "Pfadangabe vom import-Ordner angepasst (Extra und Description)" "b7464bb45a971ddd4e3fd168ced7b2156ad68dd0" "blubb" 2>file'
Die Ausgabe von 'git log origin/master --pretty=format:'"%H" * "%s"' -5 --abbrev-commit' direkt auf der Konsole sieht so aus:

Code: Alles auswählen

"d9f88604fe3fd0e80fd61f8cc4729b547138b7ef" * "Merge remote-tracking branch 'origin/master'"
"a088a2430922921b5fc98a83be3fb85dc16a749b" * "Shipping '2900' auf '0' gesetzt"
"9acb80b64e43032e8be22062571ce8654dfdaf0a" * "Version 3.1"
"954b1140a2244bac0cd6dcc2a98b17d073214a4e" * "Pfadangabe vom import-Ordner angepasst (Extra und Description)"
"b7464bb45a971ddd4e3fd168ced7b2156ad68dd0" * "blubb"
Ich hoffe jemand hat eine Idee, wie ich das Escaping richtig hinbekomme.

Danke im Voraus.
Zuletzt geändert von gbotti am 29.04.2015 15:20:30, insgesamt 1-mal geändert.
Georg
RTFM, LMGTFY, Orakel... Ach... Warum muss man suchen...
Schrödingers Backup --- "Der Zustand eines Backups ist unbekannt, solange man es nicht wiederherstellt" --- Quelle: Nixcraft

gbotti
Beiträge: 846
Registriert: 16.07.2010 14:24:43
Wohnort: München

GELÖST: Re: Bash-Script mit Dialog

Beitrag von gbotti » 29.04.2015 15:20:13

Danke. Thema hat sich erledigt. Ich habe den redirect hinter dem Command falsch gehabt.

So funktionierts:

Code: Alles auswählen

while read -r HEADER; do
                        IFS='*' read var1 var2 <<< $HEADER
                        options+=("$var1" "$var2")
done <<< "$HEADERS
cmd=(dialog --menu 'Welchen Header soll ich verwenden?' 0 0 8)
command=$("${cmd[@]}" "${options[@]}" 2>&1 >/dev/tty)
$command
Georg
RTFM, LMGTFY, Orakel... Ach... Warum muss man suchen...
Schrödingers Backup --- "Der Zustand eines Backups ist unbekannt, solange man es nicht wiederherstellt" --- Quelle: Nixcraft

Antworten