The UNIX and Linux Forums  
Ciao e benvenuto da parte degli Stati Uniti al UNIX e Linux Forum! Grazie per la visita ed unirsi alla nostra Comunità Globale.

Go Back   UNIX e Linux Forum > Inizio Forum > Shell scripting e di programmazione
.
google unix.com



Shell scripting e di programmazione Pubblica domande su KSH, CSH, SH, Bash, Perl, PHP, sed, awk e da altri script di shell e linguaggi di scripting shell qui.

Più di UNIX e Linux Forum Argomenti potreste trovare utili
Filo Thread Starter Forum Risposte Ultimo Post
Sposta Comando di stato e di uscita problema visingha Shell scripting e di programmazione 10 09-13-2008 09:08 PM
Sposta Comando di stato e di uscita problema visingha UNIX for Dummies Domande & Risposte 1 09-12-2008 03:14 AM
stato di uscita in esecuzione nel classpath java shell UNIX mmcds Di programmazione ad alto livello 2 08-02-2007 11:06 PM
verifica stato di uscita di uno script di shell kdipankar Shell scripting e di programmazione 2 05-09-2006 02:08 AM
Problema con stato di uscita diganta Shell scripting e di programmazione 1 09-28-2005 09:34 AM

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 Cerca in questo Thread Rate Thread Modalità di visualizzazione
  #1 (permalink)  
Old 01-06-2009
Philp philp is offline
Utente Registrato
  
 

Iscriviti Data: gennaio 2009
Interventi: 2
sh ricorsiva sub-shell exit status problema

Salve
Sto cercando di individuare l'uscita di un ricorsiva la funzione che sto girando come una sub-shell. Qui di seguito sono elencati parte del file di script di shell che mi dispiace ... la sua esecuzione ancora un po 'lungo winded: --

Codice:
#!/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
Ho creato la seguente struttura di directory nella mia directory locale: --
XXX
file xyz
dir \u003d YYY
file x1 y1 z1
dir \u003d ZZZ
phil file x2, y2, z2

Quando ho eseguito la shell script di ottenere il risultato: --
.//./ 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

I dont capire ciò che è il motivo per cui non ho ricevuto il "ERR2 ???". Ho err1 perché addFile restituisce 1, ma speravo di arrivare ERR2? "Perché subshell poi termina con l'uscita 1.
Mi manca qualcosa, ovviamente, sono qui e sarei grato se qualcuno può aiutare?

Grazie

Ultimo a cura di Filippo; al 01/07/2009 05:58 AM.. Motivo: Aggiunto codice tag
  #2 (permalink)  
Old 01-06-2009
cfajohnson's Avatar
cfajohnson cfajohnson is offline Forum Advisor  
Shell programmatore, autore
  
 

Iscriviti Data: marzo 2007
Luogo: Toronto, Canada
Interventi: 2.361
Citazione:
Originalmente inviato da Philp View Post
Salve
Sto cercando di individuare l'uscita di un ricorsiva la funzione che sto girando come una sub-shell. Qui di seguito sono elencati parte del file di script di shell che mi dispiace ... la sua esecuzione ancora un po 'lungo winded: --

Si prega di inserire all'interno del codice [code] tag. (Sarebbe una buona idea modificare il tuo post originale e aggiungerli.)
Citazione:
Codice:
#!/bin/sh

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

\u003d\u003d Non è un operatore in prova sh; Uso \u003d
Citazione:
Codice:
  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

Di tre non è necessario per ls, Ed è la causa del problema, dal momento che tutti gli elementi di una conduttura vengono eseguiti in subshells. Usa:

Codice:
for i in *
(I'd consigliamo di usare un nome di variabile più descrittivo, ad esempio, il file.)
Citazione:
Codice:
  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`

Tutto POSIX conchiglie hanno una variabile $ PWD; utilizzarlo, piuttosto che `pwd` come la sostituzione del comando è lento in tutte le conchiglie, tranne ksh93.
  #3 (permalink)  
Old 01-07-2009
Philp philp is offline
Utente Registrato
  
 

Iscriviti Data: gennaio 2009
Interventi: 2
Smile

Grazie per la visita aiutare
1) Sorry I did'nt conoscere il codice ... I tag sono stati aggiunti.
2) \u003d\u003d funziona per me? Forse la mia versione di bash, tranne due?
3) Brilliant! Thankyou
"Di tre non è necessario per il comando ls, ed è la causa del problema, dal momento che tutti gli elementi di una conduttura vengono eseguiti in subshells".
Questo fissa il mio problema. I dont effettivamente ancora a capire perché, ma mi hanno un letto. Thank You!
4) mi ricorderò di utilizzare $ PWD in futuro. Nel mio codice originale non ho bisogno di conoscere la directory corrente ... questo è stato necessario per ridurre questa versione.

Grazie ancora per tutto il vostro aiuto!
Closed Thread

Segnalibri

Thread Tools Cerca in questo Thread
Cerca in questo Thread:

Ricerca Avanzata
Modalità di visualizzazione Vota questo thread
Vota questo thread:

Distacco regolamento
Tu non può post nuovo thread
Tu non può inviare una risposta
Tu non può postare allegati
Tu non può modificare i tuoi post

BB codice è Su
Smilies sono Su
[IMG] codice Su
Codice HTML è Chiuso
Trackbacks sono Su
Pingbacks sono Su
Refbacks sono Su




Tutti gli orari sono GMT -4. La data di oggi è 07:09 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traduzioni Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX e Linux Forum Content Copyright © 1993-2009. Tutti i diritti Reserved.Ad di gestione da RedTyger

Contenuti pertinenti URL da vBSEO 3.2.0