it-swarm.com.de

Wie lade ich einen `zenity` List Dialog mit Space-Embedded Daten von` ls`?

Ich habe Probleme beim Laden eines zenity List Dialogs, wenn die Daten Leerzeichen enthalten.

Es ist unkompliziert, wenn die aufgelisteten Daten keine Leerzeichen enthalten.
, aber ich kenne keine einfache/Standardmethode für in Leerzeichen eingebettete Dateinamen.

Aus irgendeinem Grund ist die Ausgabe von $ (ls -Q /tmp) (Zitierte Ausgabe) immer noch
teilt die Dateinamen an jeder Stelle auf. Die Anführungszeichen und Schrägstriche in der
Die Ausgabe von ls | sed wird anscheinend eher als "finalisierte Zeichenfolge" behandelt als
als "lesbare Datenleitungen" (wie die ersten beiden Datenleitungen) ...

Ich habe es geschafft, "das Problem zu umgehen", aber wahrscheinlich selbstmodifizierenden Code
ist nicht der beste Weg! (obwohl es spaß macht! :)


Hier ist die Methode, die nicht funktioniert

zenlist="/tmp/zen list"; touch "$zenlist"
zenity --list --title='A single-column List' --width=600 --height=450 \
--column='Spaces are allowed within "q u o t e s"' \
"How much wood would a woodchuck chuck," \
"if a wooodchuck could chuck wood?" \
$(ls -Q -1 "$zenlist"* |sed 's/$/ \\/')
echo ""
# rm "$zenlist"  # Uncomment this line to delete the file

Diese Methode funktioniert, aber es muss einen "konventionellen" (besseren) Weg geben !?

zenlist="/tmp/zen list"
echo "zenity --list --title='A single-column List' --width=600 --height=450 \\" >"$zenlist"
echo "--column='Spaces are allowed within \"q u o t e s\"' \\"       >>"$zenlist"
echo "\"How much wood would a woodchuck chuck,\" \\"       >>"$zenlist"
echo "\"if a wooodchuck could chuck wood?\" \\" >>"$zenlist"
(ls -Q "$zenlist"* |sed 's/$/ \\/')   >>"$zenlist"
echo "" >>"$zenlist"
source "$zenlist"
# rm "$zenlist"  # Uncomment this line to delete the file
5
Peter.O

Das Problem ist ls. Es wurde nie für die Verwendung in Skripten entwickelt. Außerdem ist es auch sinnlos, ls in Skripten zu verwenden, da die Shell die Aufgabe viel besser erledigen kann, indem einfach ein Glob verwendet wird, siehe http://mywiki.wooledge.org/BashGuide/Patterns

zenlist="/tmp/zen list"; touch "$zenlist" "$zenlist"$'\neven with a newline'
zenity --list --title='A single-column List' --width=600 --height=450 \
       --column='Spaces are allowed within "q u o t e s"' \
       "How much wood would a woodchuck chuck," \
       "if a wooodchuck could chuck wood?" \
       "$zenlist"*

Verwenden Sie bash-Arrays, um Listenelemente mit Leerzeichen und anderen Zeichen in einer "Variablen" zu platzieren.

# assign some items to start with
items=( "How much wood would a woodchuck chuck," "if a wooodchuck could chuck wood?" )

# append some items
items+=( "$zenlist"* )

zenity --list --title='A single-column List' --width=600 --height=450 \
       --column='Spaces are allowed within "q u o t e s"' "${items[@]}"
5
geirha

Sie können den Listeninhalt wie in zenity leiten

(echo "How much wood would a woodchuck chuck," ; \
 echo "if a wooodchuck could chuck wood?" ; \
 ls -Q -1 "$zenlist"* |sed 's/$/ \\/') \
| zenity --list --title='A single-column List' --width=600 --height=450 \
         --column='Spaces are allowed within "q u o t e s"'
5
Florian Diesch