Bash - $PATH modifizieren

Hallo,

wie kann man in der bash eigentlich
günstig strings manipulieren?

Hintergrund: ich möchte den $PATH
‚on the fly‘ verändern, d.h, einen
Teilpfad rausfeuern und einen anderen
dafür reinnehmen.

In bash hab ich das nicht hinbekommen,
daher habe ich eine ‚umständliche‘
Perl-Lösung zunächst verwendet.

Beispiel: den Pfad zu Java 1.4 rausnehmen
und durch lokal durch den Pfad zu Java 1.5
ersetzen:

**newjava** =/usr/java/jdk1.5.0\_06
 path=`perl -e 'print join ":", grep {!/ **java** /} split(/:/, $ENV{PATH});'`
 export PATH=$path:blush:{ **newjava** }/bin

geht das schöner?

Grüße und Danke

CMБ

(perl)
geht das schöner?

Es gibt da immer noch sed, so dass du zB sowas machen könntest:

declare -x PATH=`echo $PATH | sed (lustigerAusdruckMit_s/_Hier)`

Die Möglichkeiten der Shell selber sind doch sehr eingeschränkt.

Hi Nicos,

naja ganz so bloed ist die Shell (zumindest die bash) auch nicht. Immerhin gibt es die einfachen Konstrukte:

var=${variable/search/replace}

um einen String innerhalb von $variable bzw.

var=${variable//search/replace}

um alle Vorkommen des Strings zu ersetzen.

In dem Fall wäre es natürlich etwas fies, den neuen Teilpfad direkt einzusetzen, weil man dann geschickt quoten muss. Besser mit Variablen:

$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:.

bbr@james ~
$ old="/bin"

bbr@james ~
$ new="/irgendetwas\_anderes"

bbr@james ~
$ echo ${PATH/:blush:old:/:blush:new:}
/usr/local/bin:/usr/bin: **/irgendetwas\_anderes** :/usr/X11R6/bin:.

Das hat doch gar nicht weh getan, oder… (weitere Möglichkeiten zu finden in der Suchmaschine deiner Wahl unter ‚bash string manipulation‘)

gruss
bernhard

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

1 Like

Hallo,

Hi,

wie kann man in der bash eigentlich
günstig strings manipulieren?

sed, awk, cut, grep… oder mit der zsh (Geruechten zufolge).

Hintergrund: ich möchte den $PATH
‚on the fly‘ verändern, d.h, einen
Teilpfad rausfeuern und einen anderen
dafür reinnehmen.

In bash hab ich das nicht hinbekommen,
daher habe ich eine ‚umständliche‘
Perl-Lösung zunächst verwendet.

geht das schöner?

Das ist jetzt rhetorisch, oder? Es geht immer schoener als Perl. Anyway… sieh Dir mal Modules an: http://modules.sourceforge.net/
HTH,
Gruss vom Frank.