/etc/profile ist falsch
Hallo, es gibt in meinem 10.3 Scripte, die mit #!/bin/sh beginnen und ". /etc/profile" ausführen, z.B. /usr/sbin/Check. Leider wird in diesem Fall ~/.bashrc gelesen. ~/.bashrc ist eine init-Datei für die Bash und nicht für die Sh, d.h. sie kann Kommandos enthalten, die die Bash versteht, die Sh aber nicht. Der Fehler liegt in diesem Check, der versucht herauszufinden, welche Shell ausgeführt wird. if test -f /proc/mounts ; then case "`/bin/ls -l /proc/$$/exe`" in */bash) is=bash ;; */ash) is=ash ;; */ksh) is=ksh ;; */pdksh) is=ksh ;; */zsh) is=zsh ;; */*) is=sh ;; esac # # `r' in $- occurs *after* system files are parsed # for a in $SHELL ; do ... Unter Linux ist /bin/sh ein Symlink auf /bin/bash. D.h. obiger Test liefert is=bash. Die Bash selbst prüft jedoch, ob sie als bash oder als sh aufgerufen wird und verhält sich als Sh etwas anders. In jedem Fall darf ein Script, das mit #!/bin/sh beginnt, ~/.bashrc nicht lesen. Ich habe das in meinem System mit diesen paar Zeilen behoben: ... case "`/bin/ls -l /proc/$$/exe`" in */bash) is=bash ;; */ash) is=ash ;; */ksh) is=ksh ;; */pdksh) is=ksh ;; */zsh) is=zsh ;; */*) is=sh ;; esac case "`awk -F'\0' '{print $1}' /proc/$$/cmdline`" in sh|*/sh) is=sh ;; esac ... Alle aufgeführten Shells habe ich damit getestet. is=sh wird gesetzt, sobald die Shell als /bin/sh oder sh aufgerufen wird. Einen Bugreport gibt es dafür auch (340952). Torsten -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
participants (1)
-
Torsten Foertsch