zsh findet commands nicht?

cat1510

Well-Known Member
Hi Leutz,

schreibe gerade ein Script und wollte das nun von a(sh) nach zsh "portieren", da ich verschiedene OS einsetze. Da wollte ich mich auf allen Systemen auf die zsh einschiessen, da das auch meine User Shell ist.
Fuehre ich das Script mit dem zsh Interpreter aus kann er bestimmte Befehle nicht finden: tar, mail, du und noch viele andere.

Der PATH ist aber ok und gibt alle wichtigen Verzeichnisse mit.
Habe ich was vergessen oder uebersehen?
Die Doku habe ich von zsh.org schon runtergeladen, aber noch nichts entdeckt...


MFG


CAT
 

MrFixit

aka uqs
Na offensichtlich ist der Pfad nicht korrekt. Leider enthaelst du uns auch das Beispielskript vor, wie sollen wir dir da helfen?

Probier mal:

zsh -c 'echo $PATH; which tar; tar'
 

cat1510

Well-Known Member
Code:
testbackup# zsh -c 'echo $PATH; which tar; tar'
/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/root/bin
/usr/bin/tar
tar: Must specify one of -c, -r, -t, -u, -x
testbackup#

Die Ausgabe sieht doch voellig ok aus oder nicht?
Ich wollte das Script nicht mitposten, weil es viel zu lang ist.

Code:
*****  Das Medium wird geprueft und vorbereitet am So  8 Mär 2009 04:03:02 UTC. *****

+printline:2> logger ' Das Medium wird geprueft und vorbereitet am So  8 Mär 2009 04:03:02 UTC.'
+/etc/backup/backupHDD.zsh:179> i=1
+/etc/backup/backupHDD.zsh:181> [ 1 -lt 10 ']'
+/etc/backup/backupHDD.zsh:182> path=+/etc/backup/backupHDD.zsh:182> eval 'echo "$SYSPATH1"'
+(eval):1> echo /etc
+/etc/backup/backupHDD.zsh:182> path=/etc
+/etc/backup/backupHDD.zsh:183> desc=+/etc/backup/backupHDD.zsh:183> eval 'echo /mnt/"$SYSDESC1"'
+(eval):1> echo /mnt/etc.tar.gz
+/etc/backup/backupHDD.zsh:183> desc=/mnt/etc.tar.gz
+/etc/backup/backupHDD.zsh:184> test /etc
+/etc/backup/backupHDD.zsh:186> tar -czf /mnt/etc.tar.gz /etc
/etc/backup/backupHDD.zsh:186: command not found: tar

+/etc/backup/backupHDD.zsh:187> [ 127 -ne 0 ']'
+/etc/backup/backupHDD.zsh:190> echo 'Das Paket /mnt/etc.tar.gz wurde ohne Fehler gepackt.'
Das Paket /mnt/etc.tar.gz wurde ohne Fehler gepackt.
+/etc/backup/backupHDD.zsh:195> i=2
+/etc/backup/backupHDD.zsh:181> [ 2 -lt 10 ']'
+/etc/backup/backupHDD.zsh:182> path=+/etc/backup/backupHDD.zsh:182> eval 'echo "$SYSPATH2"'
+(eval):1> echo /usr/local/etc
+/etc/backup/backupHDD.zsh:182> path=/usr/local/etc
+/etc/backup/backupHDD.zsh:183> desc=+/etc/backup/backupHDD.zsh:183> eval 'echo /mnt/"$SYSDESC2"'
+(eval):1> echo /mnt/localetc.tar.gz
+/etc/backup/backupHDD.zsh:183> desc=/mnt/localetc.tar.gz
+/etc/backup/backupHDD.zsh:184> test /usr/local/etc
+/etc/backup/backupHDD.zsh:186> tar -czf /mnt/localetc.tar.gz /usr/local/etc
/etc/backup/backupHDD.zsh:186: command not found: tar

Das ist die Terminalausgabe.

Der entsprechende Abschnitt im Script:

Code:
# Packschleife fuer SysPath Files

i=1

while [ $i -lt $SYSPATHCOUNT ]; do
  path="$(eval "echo \"\$SYSPATH$i\"")"
  desc="$(eval "echo $MNT"/"\"\$SYSDESC$i\"")"
  if test $path
      then
         tar -czf $desc $path
          if [ $? -ne 0 ]
                then
          fi
          echo "Das Paket $desc wurde ohne Fehler gepackt."
          else
          echo "Der Pfad ist ungueltig!"
          echo "Es wird der naechste getestet."
   fi
  i=$(($i + 1))
done

Um den Befehl tar habe ich mal testweise ` `eingebaut. Macht aber keinen Unterschied.
Wieso kann er den befehl logger finden, und tar nicht?
Im Script sind ja vorher noch andere Befehle, die er scheinbar kennt.
mount, date usw.

Habe nunmal einen absoluten Pfad fuer tar benutzt und siehe da es klappt!
Wieso aber? Am Anfang des Scripts steht eh der Interpreter und der Pfad:

Code:
#!/usr/local/bin/zsh

set -x
export LC_ALL="de_DE.UTF-8"

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/root/bin


Danke fuer Deine Hilfe. :)

CAT
 
Zuletzt bearbeitet:

MuffiXXL

Well-Known Member
Mmh, ähnliche Probleme hatte ich letztens mit der zsh auf Solaris.
Ich dachte es wäre der PATH wobei das Verhalten doch sehr seltsam war und auf ner anderen Kiste mit Linux nicht reproduzierbar.
Ich habe mich dann nicht weiter damit auseinandergesetzt und das Script auf sh angepasst.
Eine Vermutung die mir jedoch noch kam sind buildoptionen, auch wenn das wohl sehr vage ist.
Wie gesagt. Habe es nicht weiter verfolgt.
 

cat1510

Well-Known Member
Hi,

habe den 'Fehler' gefunden. Ist eigentlich trivial. Im Handbuch steht in mehreren Kapiteln, das $path expandiert wird.

In meinem Script gibt es >leider< die Variable auch.
ZSH scheint keinen Unterschied zu machen zwischen $PATH und $path.
Es expandiert beides zu den gleichen Pfaden.

Nachdem meine neue Variable nun iPATH heisst, sind alle Sorgen vergessen... :)
Oefter und laenger mal Doku lesen muss ich leider sagen. Da stehen noch sehr viele interessante Sachen drin. Hab mein Script mittlerweile nochmal umgeschrieben...

Danke an Alle!

MFG

CAT
 
Oben