The UNIX and Linux Forums  


Go Back   De Unix-en Linux Forum > Top Forums > Programmeren en Shell Scripting
.
google unix.com



Programmeren en Shell Scripting Post vragen over KSH, CSH, SH, Bash, Perl, PHP, sed, awk en andere shell scripts en shell scripting talen hier.

Meer UNIX en Linux Forum Onderwerpen Misschien vindt u Helpful
Draad Thread Starter Forum Antwoorden Last Post
Verplaats Command and exit status probleem visingha Programmeren en Shell Scripting 10 09-13-2008 09:08 PM
Verplaats Command and exit status probleem visingha UNIX voor Dummies Questions & Answers 1 09-12-2008 03:14
exit status draait Java CLASSPATH in Unix shell mmcds Hoog Niveau Programmering 2 08-02-2007 11:06 PM
controle exit status van een shell script kdipankar Programmeren en Shell Scripting 2 05-09-2006 02:08
Probleem met exit status diganta Programmeren en Shell Scripting 1 09-28-2005 09:34

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Zoeken in deze Thread Rate Thread Display Modes
  #1 (permalink)  
Old 01-06-2009
philp philp is offline
Geregistreerde gebruiker
  
 

Join Date: Jan 2009
Posten: 2
sh recursieve sub-shell exit status probleem

Hoi
Ik probeer op te sporen de exit status van een recursieve functie die ik uitgevoerd als een sub-shell. Hieronder heb ik aangeboden een deel van de shell script dat ik lopen ... sorry haar nog een beetje lange adem: --


Code:
#!/bin/sh

addFile()
{
  fileName="${1##*/}"           # Extract filename from path.
  if [ $fileName == "phil" ]
  then
    return 1 #Kick off error...
  else
    return 0
  fi
}

addCommitFiles()
{
  # Traverse to database directory or below
  cd "$topDir/$1"
  if [ $? != 0 ]
  then
    echo "topDir error $topDir/$1"
    exit 1 # Treat as fatal error.
  fi

  # List all files/dirs in this directory.
  ls | while read i
  do
    # Check if directory.
    if [ -d "$i" ]
    then
      # Pass in full relative path to topDir.
      ( addCommitFiles "$1/$i" )
      ret1=$?   # This is never non-zero???
      echo "RET=$ret1 != 1"
      if [ $ret1 != 0 ]
      then
        echo "ERR2???"
        exit 1 # Treat as fatal error.
      fi
      echo "ERR3"
    else
        echo "${rootDir}/$1/${i}"
        addFile "$1/$i"
        if [ $? != 0 ]
        then
          echo "ERR1"
          exit 1 # We get this error and would exoect 
        fi
    fi
  done
  exit 0
}

  # Main
  usrNam="XXX"
  topDir=`pwd`
  rootDir="./"

  (addCommitFiles "./$usrNam")
  if [ $? != 0 ]
  then
    echo "ERROR"
  else
    echo "OK"
  fi

Ik heb gemaakt de volgende directory structuur in mijn lokale map: --
XXX
bestanden xyz
dir \u003d YYY
bestanden x1, y1, z1
dir \u003d ZZZ
bestanden phil x2 y2 Z2

Toen ik de shell-script krijg ik de output: --
.//./ XXX / a
.//./ XXX / b
.//./ XXX / c
.//./ XXX/YYY/x1
.//./ XXX/YYY/y1
.//./ XXX/YYY/z1
.//./ XXX / YYY / ZZZ / phil
ERR1
RET \u003d 0! \u003d 1
ERR3
RET \u003d 0! \u003d 1
ERR3
OK

Wat ik dont begrijp is waarom ik niet de "ERR2 ???". krijgen Ik krijg ERR1 verricht, omdat addFile geeft 1, maar ik hoopte ERR2 krijgen?? ", Omdat de subschil vervolgens uitgangen met exit 1.
Ik ben natuurlijk iets ontbreekt hier en zou dankbaar zijn als iemand kan helpen?

Bedankt

Laatst bewerkt door Philp; op 01.07.2009 05:58.. Reden: Toegevoegd Code tags
  #2 (permalink)  
Old 01-06-2009
cfajohnson's Avatar
cfajohnson cfajohnson is offline Forum Advisor  
Shell programmeur, auteur
  
 

Join Datum: maart 2007
Plaats: Toronto, Canada
Berichten: 2.362
Citaat:
Oorspronkelijk geplaatst door philp View Post
Hoi
Ik probeer op te sporen de exit status van een recursieve functie die ik uitgevoerd als een sub-shell. Hieronder heb ik aangeboden een deel van de shell script dat ik lopen ... sorry haar nog een beetje lange adem: --

Gelieve gebracht code in [code] tags. (Het zou een goed idee om uw originele post bewerken en deze toe te voegen.)
Citaat:
Code:
#!/bin/sh

addFile()
{
  fileName="${1##*/}"           # Extract filename from path.
  if [ $fileName == "phil" ]

\u003d\u003d Is geen test operator sh; Gebruik \u003d
Citaat:
Code:
  then
    return 1 #Kick off error...
  else
    return 0
  fi
}

addCommitFiles()
{
  # Traverse to database directory or below

  cd "$topDir/$1"
  if [ $? != 0 ]
  then
    echo "topDir error $topDir/$1"
    exit 1 # Treat as fatal error.
  fi

  # List all files/dirs in this directory.
  ls | while read i

Thre is niet nodig ls, En het is de oorzaak van uw probleem, aangezien alle elementen van een pijpleiding worden uitgevoerd in subshells. Gebruik:


Code:
for i in *

(Ik zou adviseren het gebruik van een variabele meer beschrijvende naam, bijvoorbeeld bestand.)
Citaat:
Code:
  do
    # Check if directory.
    if [ -d "$i" ]
    then
      # Pass in full relative path to topDir.
      ( addCommitFiles "$1/$i" )
      ret1=$?   # This is never non-zero???
      echo "RET=$ret1 != 1"
      if [ $ret1 != 0 ]
      then
        echo "ERR2???"
        exit 1 # Treat as fatal error.
      fi
      echo "ERR3"
    else
        echo "${rootDir}/$1/${i}"
        addFile "$1/$i"
        if [ $? != 0 ]
        then
          echo "ERR1"
          exit 1 # We get this error and would exoect 
        fi
    fi
  done
  exit 0
}

  # Main
  usrNam="XXX"
  topDir=`pwd`

Alle POSIX schelpen hebben een $ PWD variabele; gebruiken in plaats van `pwd` als commando substitutie is langzaam in alle schalen behalve ksh93.
  #3 (permalink)  
Old 01-07-2009
philp philp is offline
Geregistreerde gebruiker
  
 

Join Date: Jan 2009
Posten: 2
Smile

Bedankt voor hulp tour
1) Sorry dat ik did'nt weten over de code tags ... Ik heb ze toegevoegd.
2) \u003d\u003d werkt voor mij? Misschien is mijn versie van bash, behalve op beide???
3) Brilliant! Thankyou
"Thre is geen noodzaak voor ls, en het is de oorzaak van uw probleem, aangezien alle elementen van een pijpleiding worden uitgevoerd in subshells."
Deze vaste mijn probleem. I dont werkelijk begrijpen waarom, maar ik zal een gelezen. Thank You!!
4) Ik zal herinneren aan $ PWD gebruik in de toekomst. In mijn oorspronkelijke code heb ik niet nodig om de huidige directory weten ... dit was nodig voor deze omgehakt versie.

Nogmaals bedankt voor al je hulp!
Closed Thread

Bladwijzers

Thread Tools Zoeken in deze Thread
Zoeken in deze Thread:

Uitgebreid zoeken
Display Modes Beoordeel deze draad
Beoordeel deze draad:

Posting Regels
Jij mag niet Post Nieuwe threads
Jij mag niet na antwoorden
Jij mag niet post attachments
Jij mag niet bewerk uw berichten

BB code is Aan
Smilies zijn Aan
[IMG] code Aan
HTML-code is Uit
Trackbacks zijn Aan
Pingbacks zijn Aan
Refbacks zijn Aan




Alle tijden zijn GMT -4. Het is nu 10:39.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Vertalingen Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
De Unix-en Linux Forums Copyright © 1993-2009. Alle rechten Reserved.Ad Beheer door RedTyger

Content Relevante URL's door vBSEO 3.2.0