Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
bash-skripting: USE-flags sortieren
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German)
View previous topic :: View next topic  
Author Message
Christian99
Veteran
Veteran


Joined: 28 May 2009
Posts: 1018

PostPosted: Wed Jun 30, 2010 4:17 pm    Post subject: bash-skripting: USE-flags sortieren Reply with quote

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
View user's profile Send private message
SinoTech
Advocate
Advocate


Joined: 20 Mar 2004
Posts: 2579
Location: Neunkirchen / Saarland / Germany

PostPosted: Wed Jun 30, 2010 9:26 pm    Post subject: Re: bash-skripting: USE-flags sortieren Reply with quote

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
View user's profile Send private message
69719
l33t
l33t


Joined: 20 Sep 2004
Posts: 865

PostPosted: Wed Jun 30, 2010 9:37 pm    Post subject: Reply with quote

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
View user's profile Send private message
Christian99
Veteran
Veteran


Joined: 28 May 2009
Posts: 1018

PostPosted: Thu Jul 01, 2010 10:08 am    Post subject: Reply with quote

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
View user's profile Send private message
Qubit
Tux's lil' helper
Tux's lil' helper


Joined: 23 Sep 2002
Posts: 136
Location: /dev/urandom

PostPosted: Thu Jul 01, 2010 2:57 pm    Post subject: Reply with quote

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
View user's profile Send private message
69719
l33t
l33t


Joined: 20 Sep 2004
Posts: 865

PostPosted: Mon Jul 05, 2010 10:06 am    Post subject: Reply with quote

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
View user's profile Send private message
69719
l33t
l33t


Joined: 20 Sep 2004
Posts: 865

PostPosted: Mon Jul 05, 2010 10:07 am    Post subject: Reply with quote

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
View user's profile Send private message
Hollowman
Guru
Guru


Joined: 19 Apr 2007
Posts: 584

PostPosted: Mon Jul 05, 2010 2:07 pm    Post subject: Reply with quote

Hi

Benutze einfach ufed anstatt euse. Dann sind sie immer sortiert.

Sebastian
Back to top
View user's profile Send private message
Massimo B.
Veteran
Veteran


Joined: 09 Feb 2005
Posts: 1230
Location: PB, Germany

PostPosted: Wed Aug 08, 2012 9:37 am    Post subject: Reply with quote

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.
_________________
ppc:PowerBook5,8 15"(1440)-G4/1.67,2G | amd64:Acer Z5610 (Core2QuadQ8200),i5-3470 | amd64-prefix:OpenSuse | Lila-Theme
Back to top
View user's profile Send private message
mv
Advocate
Advocate


Joined: 20 Apr 2005
Posts: 4348

PostPosted: Thu Aug 09, 2012 7:08 am    Post subject: Re: bash-skripting: USE-flags sortieren Reply with quote

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
View user's profile Send private message
musv
Advocate
Advocate


Joined: 01 Dec 2002
Posts: 2695
Location: de

PostPosted: Sat Aug 11, 2012 11:53 am    Post subject: Reply with quote

Da es vielleicht untergegangen ist:
Hollowman wrote:
Benutze einfach ufed anstatt euse. Dann sind sie immer sortiert.
Back to top
View user's profile Send private message
Genone
Retired Dev
Retired Dev


Joined: 14 Mar 2003
Posts: 9013
Location: beyond the rim

PostPosted: Thu Aug 16, 2012 11:04 am    Post subject: Re: bash-skripting: USE-flags sortieren Reply with quote

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
View user's profile Send private message
mv
Advocate
Advocate


Joined: 20 Apr 2005
Posts: 4348

PostPosted: Thu Aug 16, 2012 12:38 pm    Post subject: Re: bash-skripting: USE-flags sortieren Reply with quote

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
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum