View previous topic :: View next topic |
Author |
Message |
Christian99 Veteran
Joined: 28 May 2009 Posts: 1673
|
Posted: Wed Jun 30, 2010 4:17 pm Post subject: bash-skripting: USE-flags sortieren |
|
|
hallo, ich hab mir heut meine make.conf angeschaut, und da stehn massenweise USE-flags drin. normalerweis verwende ich euse dafür, also stehn die alle in der Reihenfolge, wie sie mit euse (de)aktiviert worden sind.
hab mir überlegt, die alphabetisch zu sortieren (bash-skript), klappt auch schon so wie es soll. aber momentan geb ich alles wie es sein soll mit echo aus. wie krieg ich das jetzt am besten so in die "make.conf" rein??
hier das skript:
Code: | #!/bin/bash
shopt -s nocasematch
source /etc/make.conf
SORT_USE=$( echo $USE | tr ' ' '\n' | sort -f )
#echo $SORT_USE
echo "USE=\""
for k in "" -; do
for i in $( echo {a..z} ); do
echo -ne "\t"
for j in $SORT_USE; do
if [[ $j =~ ^[$k][$i][:alnum:]* ]]; then
echo -n "$j"
echo -n " "
fi
done
echo "\\"
done
done
echo "\""
|
das "source /etc/make.conf" gefällt mir auch net so recht. gibts da was besseres die USE-Variable (und nur die) rauszuholen?
und so die ausgabe wie sie sein soll und in die make.conf soll:
Code: | USE="
a52 aac aalib acpi adns aim allegro alsa amr apache2 apm \
bash-completion branding \
cairo caps cdda cddb cdio cdparanoia cdr consolekit crypt cups curl custom-cflags custom-optimization cxx \
dbus dga dhcpcd djvu dri dv dvb dvd dvdr dvdread \
encode encoding examples exif expat \
fbcondecor ffmpeg fftw flac fontconfig \
gcj gd geoip gif gimp glade glib gmp gnutls gpg gphoto2 graphviz gstreamer \
handbook \
icu id3tag ieee1394 imagemagick imlib inotify \
java java6 javascript jbig joystick jpeg jpeg2k \
kde kvm \
lame latex lcms ldap libcaca libnotify libsamplerate lm_sensors lua lzma lzo \
mad matroska md5sum midi mikmod mmap mmx mmxext mng modplug mono mozilla mp3 mpeg mplayer mtp musepack mysql mysqli \
networkmanager nfs nls nsplugin \
objc ogg openal opencl openexr opengl \
pcntl pdf phonon php plasma png posix pulseaudio \
qt qt3 qt3support qt4 quicktime \
raw \
sasl scanner sdl smp sndfile speex spell sql sqlite sse sse2 ssse3 startup-notification subversion svg svn \
taglib theora threads tiff truetype \
udev unicode usb \
v4l v4l2 vcd vhosts vnc vorbis \
wmf wxwindows \
X x264 xcb xcomposite xml xosd xpm xprint xscreensaver xulrunner xv xvid \
\
zip \
-arts \
-berkdb \
-cjk \
\
\
\
-gcl -gnome -gtk -gtk2 \
-hal \
\
-jabber \
\
\
\
\
-oss \
-pm-utils -policykit \
\
\
-semantic-desktop -static \
\
-urandom \
\
\
-xine \
\
-zeroconf \
" |
Schon mal danke für Vorschläge/Hinweise/tipps!
PS: ja, ich weiß man kann auch mit euse die variablen abfragen, aber das ist mir erst eingefallen, als ich das obige schon hatte, und jetzt würds mich zumindest interessieren, wie man das am besten macht.
PS |
|
Back to top |
|
|
SinoTech Advocate
Joined: 20 Mar 2004 Posts: 2579 Location: Neunkirchen / Saarland / Germany
|
Posted: Wed Jun 30, 2010 9:26 pm Post subject: Re: bash-skripting: USE-flags sortieren |
|
|
Christian99 wrote: |
[...]
hab mir überlegt, die alphabetisch zu sortieren (bash-skript), klappt auch schon so wie es soll. aber momentan geb ich alles wie es sein soll mit echo aus. wie krieg ich das jetzt am besten so in die "make.conf" rein??
[...]
|
Schreib dein "USE=..." in eine separate Datei und benutze diese dann in der make.conf
/etc/make.use wrote: |
USE="aigl aiglx alsa \
bzip2 \
cscope css \
dri dvd dvdr \
exif \
ffmpeg \
gif glibc-compat20 glibc-omitfp gnome gnutls gphoto2 gtk gtk2 \
\
imlib \
java jpeg jpeg2k \
kdehiddenvisibility \
[...]
|
/etc/make.conf wrote: |
[...]
source /etc/make.use
|
Christian99 wrote: |
[...]
das "source /etc/make.conf" gefällt mir auch net so recht. gibts da was besseres die USE-Variable (und nur die) rauszuholen?
[...]
|
Nein. Der Inahlt der USE-Variablen kann auf einer Zeile stehen oder in mehrere Zeilen aufgeteilt werden (und selbst da gibt es verschiedene Möglichkeiten). Es ist der einfachste und schönste Weg das ganze von der Shell parsen zu lassen.
Cheers,
Sino _________________ Help to answer the unanswered |
|
Back to top |
|
|
69719 l33t
Joined: 20 Sep 2004 Posts: 865
|
Posted: Wed Jun 30, 2010 9:37 pm Post subject: |
|
|
Schnelllösung
Code: |
echo $(echo -n 'USE="' && for FLAG in $(source /etc/make.conf && echo $USE); do echo $FLAG; done | sort -u | while read FLAG; do echo -n $FLAG" "; done) > /tmp/make.conf && grep -v 'USE=' /etc/make.conf | grep '=' >> /tmp/make.conf && mv /tmp/make.conf /etc/make.conf.new
|
|
|
Back to top |
|
|
Christian99 Veteran
Joined: 28 May 2009 Posts: 1673
|
Posted: Thu Jul 01, 2010 10:08 am Post subject: |
|
|
Danke für eure tipps, das mit dem source /etc/make.use hört sich glaub ich am einfachsten an.
escor:
wenn ich das richtig verstehe, schreibst du die make.conf einfach neu. Die USE-flags sind so zwar sortiert, aber dafür verschwinden Leerzeilen, Kommmentare/sonstige Ordnung aus der make.conf. ist nicht so ganz das was ich möchte. |
|
Back to top |
|
|
Qubit Tux's lil' helper
Joined: 23 Sep 2002 Posts: 136 Location: /dev/urandom
|
Posted: Thu Jul 01, 2010 2:57 pm Post subject: |
|
|
Hi
Code: |
#!/bin/bash
MAKE_CONF="/etc/make.conf"
SORTED_USE_FLAGS=`grep '^USE' "$MAKE_CONF"|cut -d "\"" -f2|tr -s " " "\n"|sort|tr -s "\n" " "`
USE_FLAGS="USE=\"$SORTED_USE_FLAGS\""
sed -i "s/^USE.*$/${USE_FLAGS}/g" "$MAKE_CONF"
|
Bitte vorher die 'make.conf' sichern!
Gruß Daniel _________________ ©Qubit |
|
Back to top |
|
|
69719 l33t
Joined: 20 Sep 2004 Posts: 865
|
Posted: Mon Jul 05, 2010 10:06 am Post subject: |
|
|
Qubit wrote: | Hi
Code: |
#!/bin/bash
MAKE_CONF="/etc/make.conf"
SORTED_USE_FLAGS=`grep '^USE' "$MAKE_CONF"|cut -d "\"" -f2|tr -s " " "\n"|sort|tr -s "\n" " "`
USE_FLAGS="USE=\"$SORTED_USE_FLAGS\""
sed -i "s/^USE.*$/${USE_FLAGS}/g" "$MAKE_CONF"
|
Bitte vorher die 'make.conf' sichern!
Gruß Daniel |
Das funktioniert leider nicht wenn USE mehrzeilig ist! |
|
Back to top |
|
|
69719 l33t
Joined: 20 Sep 2004 Posts: 865
|
Posted: Mon Jul 05, 2010 10:07 am Post subject: |
|
|
Christian99 wrote: | Danke für eure tipps, das mit dem source /etc/make.use hört sich glaub ich am einfachsten an.
escor:
wenn ich das richtig verstehe, schreibst du die make.conf einfach neu. Die USE-flags sind so zwar sortiert, aber dafür verschwinden Leerzeilen, Kommmentare/sonstige Ordnung aus der make.conf. ist nicht so ganz das was ich möchte. |
Jepp is richtig.
Wenn du alles erhalten haben willst, wie es ist, dann nutz einfach ufed und speicher es ab. Ufed sortiert autoamtisch die USE Flags beim speichern. |
|
Back to top |
|
|
Hollowman Guru
Joined: 19 Apr 2007 Posts: 584
|
Posted: Mon Jul 05, 2010 2:07 pm Post subject: |
|
|
Hi
Benutze einfach ufed anstatt euse. Dann sind sie immer sortiert.
Sebastian |
|
Back to top |
|
|
Massimo B. Veteran
Joined: 09 Feb 2005 Posts: 1776 Location: PB, Germany
|
Posted: Wed Aug 08, 2012 9:37 am Post subject: |
|
|
app-portage/flaggie hilft bereits beim Sortieren der /etc/portage/* files. Das könnte auch den Job zum Sortieren der make.conf USE flags übernehmen. flaggie funktioniert aber für mich in vielen Dingen irgendwie nicht, und ich weiß nicht, ob es noch gefplegt wird.
Danke für den Tip mit ufed, kannte ich noch nicht.
Schade, dass es so viele Tools um Portage herum gibt. Zumindest die etablierten Tools sollten irgendwann "offiziell" werden, das heisst in den Gentoo Documents erwähnt werden.
Eine andere Idee zur Sortierung von make.conf USE flags wäre, dass euse diese gleich sortiert. Ich pflege die flags bereits lange mit euse. Dieses bricht die Variable auch korrekt um, macht aber bisher noch keine Sortierung. _________________ HP ZBook Power 15.6" G8 i7-11800H|HP EliteDesk 800G1 i7-4790|HP Compaq Pro 6300 i7-3770 |
|
Back to top |
|
|
mv Watchman
Joined: 20 Apr 2005 Posts: 6749
|
Posted: Thu Aug 09, 2012 7:08 am Post subject: Re: bash-skripting: USE-flags sortieren |
|
|
Christian99 wrote: | das "source /etc/make.conf" gefällt mir auch net so recht. gibts da was besseres die USE-Variable (und nur die) rauszuholen? |
Die langsame Möglichkeit:
Code: | USE=`portageq envvar USE` |
Die schnelle Möglichkeit:
Code: | USE=`eix --print USE` |
In beiden Fällen gehen aufgrund des `` Newlines am Ende verloren (was für Dich wohl nicht wichtig ist). Das lässt sich auf bekannte Art umschiffen, am Einfachsten mit
Code: | . eix-functions.sh
ReadVar USE USE |
|
|
Back to top |
|
|
musv Advocate
Joined: 01 Dec 2002 Posts: 3337 Location: de
|
Posted: Sat Aug 11, 2012 11:53 am Post subject: |
|
|
Da es vielleicht untergegangen ist:
Hollowman wrote: | Benutze einfach ufed anstatt euse. Dann sind sie immer sortiert. |
|
|
Back to top |
|
|
Genone Retired Dev
Joined: 14 Mar 2003 Posts: 9543 Location: beyond the rim
|
Posted: Thu Aug 16, 2012 11:04 am Post subject: Re: bash-skripting: USE-flags sortieren |
|
|
mv wrote: | Christian99 wrote: | das "source /etc/make.conf" gefällt mir auch net so recht. gibts da was besseres die USE-Variable (und nur die) rauszuholen? |
Die langsame Möglichkeit:
Code: | USE=`portageq envvar USE` |
Die schnelle Möglichkeit:
Code: | USE=`eix --print USE` |
|
Weiss nicht wie eix das handhabt, aber die portageq Lösung liefert den fertig ausgewerteten Wert von $USE, der in diesem Fall wohl nicht gewünscht ist (keine Negation, inkl. Standardwerte und USE_EXPAND). |
|
Back to top |
|
|
mv Watchman
Joined: 20 Apr 2005 Posts: 6749
|
Posted: Thu Aug 16, 2012 12:38 pm Post subject: Re: bash-skripting: USE-flags sortieren |
|
|
Genone wrote: | die portageq Lösung liefert den fertig ausgewerteten Wert von $USE, der in diesem Fall wohl nicht gewünscht ist (keine Negation, inkl. Standardwerte und USE_EXPAND). |
Das hatte ich nicht erwartet. Dann geht nur die eix-Lösung sauber: eix --print gibt nur den in Config-Files (oder Environment) definierten Variablenwert aus.
eix ist auf jeden Fall Shell-sourcing vorzuziehen: Nicht nur, weil es schneller ist, sondern auch, weil es Sicherheitsprobleme vermeidet und auch mit Syntax klar kommt, die in make.conf zulässig ist, an der die Shell aber scheitert (bsp. Leerzeichen um "=", spezielle Escapes usw) |
|
Back to top |
|
|
|