• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Sprichwörter und Redewendungen sind das Thema unseres Monatswettbewerbes. Nähere Informationen dazu gibt es natürlich auch, und zwar auf dieser Seite ---> Klick

~/.profile um Suchpfad ergänzen, aber wie?

jopa5800

Jonagold
Registriert
30.04.06
Beiträge
21
Hallo ins Forum,

ich habe versucht, nach Anweisungen, die ich im Netz fand, den Suchpfad um das Verzeichnis
~/meinprog zu ergänzen. Funktioniert nur leider nicht. Was mache ich falsch?
Hier mein ~/.profile:


##
# DELUXE-USR-LOCAL-BIN-INSERT
# (do not remove this comment)
##
echo $PATH | grep -q -s "/usr/local/bin"
if [ $? -eq 1 ] ; then
PATH=$PATH:/usr/local/bin
export PATH=$PATH:/Users/jopa/meinprog
fi

test -r /sw/bin/init.sh && . /sw/bin/init.sh



Wenn ich im Terminal eingebe:

echo $PATH | tr ':' '\n'

erhalte ich (wie vor der Ergänzung auch schon):

/sw/bin
/sw/sbin
/bin
/sbin
/usr/bin
/usr/sbin
/usr/local/bin
/usr/texbin
/usr/X11R6/bin

Danke für Eure Hilfe.

Gruß

jopa
 

jopa5800

Jonagold
Registriert
30.04.06
Beiträge
21
Nimm doch einfach den export-Befehl aus dem if-Konstrukt heraus, weiter nach unten.

Hallo quarx,

zunächst einmal vielen Dank für Deinen Hinweis. Das war soweit auch erfolgreich. ~/meinprog ist jetzt tatsächlich im Suchpfad, allerdings erhalte ich jetzt mit echo $PATH | tr ':' '\n' im Anschluss an die Suchpfade noch folgende Meldungen (abgekürzt):

dslb-xxx-xxx-xxx-xxx:~ jopa$ /sw/bin
-bash: /sw/bin: is a directory
dslb-xxx-xxx-xxx-xxx:~ jopa$ /sw/sbin
-bash: /sw/sbin: is a directory
dslb-xxx-xxx-xxx-xxx:~ jopa$ /bin
-bash: /bin: is a directory
usw.

Da wird wohl versucht, die Verzeichnisse aus Programme anzusprechen. Kann das später irgendwelche Probleme verursachen? Danke für Deine oder Eure Hilfe.

Gruß

jopa
 

Skeeve

Pomme d'or
Registriert
26.10.05
Beiträge
3.120
So wie ich das sehe, versucht dieser Code einen Pfad anzuhängen, sofern er nicht schon im Pfad ist. Ich habe mir dafür folgende Funktion gebastelt:
Code:
addpath () {
        P=$1
        shift
        while [ -n "$1" ]
        do      case :$P: in
                *:$1:*) ;;
                *) P=$P:$1 ;;
                esac
                shift
        done
        echo $P
}
Aufgerufen wird sie wie folgt:
Code:
PATH=`addpath $PATH /usr/local/bin /usr/local/mysql/bin ~/meinprog`
export PATH
Alle angegebenen Pfade werden einzeln geprüft und nur bei Nicht-Vorhandensein an $PATH angehängt.
 

IceHouse

Ribston Pepping
Registriert
30.09.04
Beiträge
297
[...]ich habe versucht, nach Anweisungen, die ich im Netz fand, den Suchpfad um das Verzeichnis ~/meinprog zu ergänzen. Funktioniert nur leider nicht. Was mache ich falsch?
Anbei eine kleine Angel, um dich in Zukunft selber mit Fisch zu versorgen :D

man path_helper

path_helper(8) BSD System Manager's Manual path_helper(8)

NAME
path_helper -- helper for constructing PATH environment variable

SYNOPSIS
path_helper [-c | -s]

DESCRIPTION
The path_helper utility reads the contents of the files in the directories /etc/paths.d and /etc/manpaths.d and appends their contents to the PATH and MANPATH environment variables respectively.

Files in these directories should contain one path element per line.

Prior to reading these directories, default PATH and MANPATH values are obtained from the files /etc/paths and /etc/manpaths respectively.

Options:

-c Generate C-shell commands on stdout. This is the default if SHELL ends with "csh".

-s Generate Bourne shell commands on stdout. This is the default if SHELL does not end with "csh".

NOTE
The path_helper utility should not be invoked directly. It is intended only for use by the shell profile.

Mac OS X March 15, 2007 Mac OS X

--(icehouse@osx)-(6/ttys002)-(15:29:01/23-May-08)--
--($:~)-- ls -l /etc/paths.d/
total 16
-rw-r--r-- 1 root wheel 13 Sep 24 04:53 X11
-rw-r--r-- 1 root wheel 15 Feb 5 12:36 apache2
--(icehouse@osx)-(7/ttys002)-(15:30:02/23-May-08)--
--($:~)-- cat /etc/paths.d/apache2
/usr/local/apache2/bin/

Gruss von IceHouse
 

jopa5800

Jonagold
Registriert
30.04.06
Beiträge
21
Hallo Skeeve,

ich habe leider (noch) nicht soviel Ahnung von Bash & Co, daß ich Deine Lösung einfach nachvollziehen könnte. Dennoch vielen Dank. Ich hab es mir kopiert, zur späteren Verwendung.

quarx’ Lösung funktioniert und inzwischen hab ich auch auf meine 2. Frage (die Bash Fehlermeldungen nach der Umsetzung von quarx’ Vorschlag) eine Lösung:


##
# DELUXE-USR-LOCAL-BIN-INSERT
# (do not remove this comment)
##
echo $PATH | grep -q -s "/usr/local/bin"
if [ $? -eq 1 ] ; then
PATH=$PATH:/usr/local/bin
export PATH=$PATH:

fi
export PATH=$PATH:/Users/jopa/meinprog

test -r /sw/bin/init.sh && . /sw/bin/init.sh

Bis jetzt funktioniert alles so wie es soll. Wenn natürlich jemandem etwas Fehlerhaftes auffält, bin ich für Hinweise dankbar.

Nochmals herzlichen Dank an Euch

Gruß

jopa
 

Skeeve

Pomme d'or
Registriert
26.10.05
Beiträge
3.120
ich habe leider (noch) nicht soviel Ahnung von Bash & Co, daß ich Deine Lösung einfach nachvollziehen könnte.

Code:
 addpath () { # definiert eine Funktion
        # Kopiere den ersten Parameter nach $P
        P=$1
        # verschiebe alle Parameter um 1 nach links
        shift
        # Solange noch Parameter da sind ($1 nicht leer ist)
        while [ -n "$1" ]
        # prüfe das bisherige $P, eingerahmt von 2 Doppelpunkten
        do      case :$P: in
                # wenn es diesem Muster entspricht, mach nichts
                *:$1:*) ;;
                # ansonsten hänge $1 an $P an
                *) P=$P:$1 ;;
                esac
                # verschiebe wieder um einen Parameter
                shift
        done
        # gib das Ergebnis aus
        echo $P
}

Ein Beispiel:
Code:
bsp=/pfad/a:pfad/z
addpath $bsp /pfad/b /pfad/a /pfad/c
nun passier folgendes:
Code:
[color=teal]in addpath ist:[/color]
  [color=purple]$1=[/color][color=blue]/pfad/a:/pfad/z[/color]
  [color=purple]$2=[/color][color=blue]/pfad/b[/color]
  [color=purple]$3=[/color][color=blue]/pfad/a[/color]
  [color=purple]$4=[/color][color=blue]/pfad/c[/color]
[color=teal]P=[color=blue]$1[/color][/color]
  [color=purple]$P=[/color][color=blue]/pfad/a:/pfad/z[/color]
  [color=purple]$1=[/color][color=blue]/pfad/a:/pfad/z[/color]
  [color=purple]$2=[/color][color=blue]/pfad/b[/color]
  [color=purple]$3=[/color][color=blue]/pfad/a[/color]
  [color=purple]$4=[/color][color=blue]/pfad/c[/color]
[color=teal]shift[/color]
  [color=purple]$P=[/color][color=blue]/pfad/a:/pfad/z[/color]
  [color=purple]$1=[/color][color=blue]/pfad/b[/color]
  [color=purple]$2=[/color][color=blue]/pfad/a[/color]
  [color=purple]$3=[/color][color=blue]/pfad/c[/color]

[color=teal]$1 ist nicht leer[/color]
[color=teal]case :$P: -> case :/pfad/a:/pfad/z:[/color]
[color=teal]*:$1:*) -> *:/pfad/b:* -> passt nicht[/color]
[color=teal]*) -> passt -> P=[color=blue]$P:$1[/color][/color]
  [color=purple]$P=[/color][color=blue]/pfad/a:/pfad/z:/pfad/b[/color]
  [color=purple]$1=[/color][color=blue]/pfad/b[/color]
  [color=purple]$2=[/color][color=blue]/pfad/a[/color]
  [color=purple]$3=[/color][color=blue]/pfad/c[/color]
[color=teal]shift[/color]
  [color=purple]$P=[/color][color=blue]/pfad/a:/pfad/z:/pfad/b[/color]
  [color=purple]$1=[/color][color=blue]/pfad/a[/color]
  [color=purple]$2=[/color][color=blue]/pfad/c[/color]

[color=teal]$1 ist nicht leer[/color]
[color=teal]case :$P: -> case :/pfad/a:/pfad/z:/pfad/b[/color]
[color=teal]*:$1:*) -> *:/pfad/a:* -> passt! -> nichts weiter geschieht[/color]
[color=teal]shift[/color]
  [color=purple]$P=[/color][color=blue]/pfad/a:/pfad/z:/pfad/b[/color]
  [color=purple]$1=[/color][color=blue]/pfad/c[/color]

[color=teal]$1 ist nicht leer[/color]
[color=teal]case :$P: -> case :/pfad/a:/pfad/z:/pfad/b[/color]
[color=teal]*:$1:*) -> *:/pfad/c:* -> passt nicht[/color]
[color=teal]*) -> passt -> P=[color=blue]$P:$1[/color][/color]
  [color=purple]$P=[/color][color=blue]/pfad/a:/pfad/z:/pfad/b:/pfad/c[/color]
  [color=purple]$1=[/color][color=blue]/pfad/c[/color]

[color=teal]shift[/color]
  [color=purple]$P=[/color][color=blue]/pfad/a:/pfad/z:/pfad/b:/pfad/c[/color]

[color=teal]$1 ist leer -> Schleife zuende[/color]
[color=teal]echo $P
  liefert /pfad/a:/pfad/z:/pfad/b:/pfad/c[/color]
 

jopa5800

Jonagold
Registriert
30.04.06
Beiträge
21
Danke, Skeeve…

…das ist wirklich sehr interessant und lehrreich. Hab hier schon ein Shellscripting Buch rumliegen und werde mic damit mal näher beschäftigen.

Gruß

jopa