The UNIX and Linux Forums  
Hola y bienvenida de los Estados Unidos a la UNIX y Linux Foros! Gracias por su visita y formar parte de nuestra comunidad global.

Go Back   El UNIX y Linux Foros > Arriba Foros > Programación de scripts de shell y
.
google unix.com



Programación de scripts de shell y Plantear preguntas sobre KSH, CSH, SH, BASH, PERL, PHP, SED, AWK y otros scripts de shell y lenguajes de script de shell aquí.

Más UNIX y Linux Foro Temas usted puede encontrar útiles
Hilo Hilo para principiantes Foro Respuestas Último mensaje
Mover Comando problema y de salida visingha Programación de scripts de shell y 10 09-13-2008 08:08 PM
Mover Comando problema y de salida visingha UNIX for Dummies Preguntas y Respuestas 1 09-12-2008 02:14 AM
salida de clases de Java en ejecución en shell de Unix mmcds Programación de Alto Nivel 2 08-02-2007 10:06 PM
control de salida de un script de shell kdipankar Programación de scripts de shell y 2 05-09-2006 01:08 AM
Problema con el estado de salida diganta Programación de scripts de shell y 1 09-28-2005 08: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 vínculo Herramientas de hilo Buscar en este Hilo Tasa de Hilo Modos de visualización
  #1 (Enlace permanente)  
Old 01-06-2009
Philp philp is offline
Usuario Registrado
  
 

Fecha: enero 2009
Publicaciones: 2
sh recursivo sub-depósito de salida problema

Hola
Estoy tratando de detectar el estado de salida de una función recursiva que estoy ejecutando como un sub-shell. A continuación una lista de parte del archivo de script de shell que estoy corriendo ... lo siento todavía un poco de su largo aliento: --

Código:
#!/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
He creado la siguiente estructura de directorios en mi directorio local: --
XXX
archivos xyz
dir \u003d YYY
archivos X1 Y1 Z1
dir \u003d ZZZ
Phil archivos x2 y2 z2

Cuando ejecute el script de shell que la siguiente salida: --
.//./ 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
Aceptar

Lo que no entiendo es por qué no tengo la "ERR2 ???". Me ERR1 porque AddFile devuelve 1, pero me esperaba obtener ERR2? "Porque la subshell sale con la salida 1.
Me estoy perdiendo algo, obviamente, aquí y agradecería si alguien puede ayudar?

Gracias

Última edición por Philp; 01-07-2009 en 05:58 AM.. Motivo: Añadido Código etiquetas
  #2 (Enlace permanente)  
Old 01-06-2009
cfajohnson's Avatar
cfajohnson cfajohnson is offline Forum Advisor  
Shell programador, autor
  
 

Fecha: marzo 2007
Ubicación: Toronto, Canadá
Puestos: 2.361
Cita:
Publicado originalmente por Philp View Post
Hola
Estoy tratando de detectar el estado de salida de una función recursiva que estoy ejecutando como un sub-shell. A continuación una lista de parte del archivo de script de shell que estoy corriendo ... lo siento todavía un poco de su largo aliento: --

Por favor poner el código dentro de [code] etiquetas. (Sería una buena idea de editar su post original y añadir ellos.)
Cita:
Código:
#!/bin/sh

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

\u003d\u003d No es una prueba en el operador sh; Uso \u003d
Cita:
Código:
  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

Tres, no es necesario para LS, Y es la causa de su problema, ya que todos los elementos de un gasoducto se ejecutan en subshells. Uso:

Código:
for i in *
(Le recomiendo utilizar una variable de nombre más descriptivo, por ejemplo, el archivo.)
Cita:
Código:
  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`

Todo POSIX depósitos tienen una variable $ PWD; utilizarlo en lugar de `pwd» como de sustitución de comandos es lento en todos los depósitos, excepto ksh93.
  #3 (Enlace permanente)  
Old 01-07-2009
Philp philp is offline
Usuario Registrado
  
 

Fecha: enero 2009
Publicaciones: 2
Smile

Gracias por ayudar a gira
1) Lo siento, did'nt saber sobre el código de las etiquetas ... he añadido.
2) \u003d\u003d trabaja para mí? Tal vez mi versión de bash se excluyen los dos?
3) Brillante! Gracias
"Tres no es necesario para ls, y es la causa de su problema, ya que todos los elementos de un gasoducto se ejecutan en subshells".
Este fijo mi problema. Yo realmente no entiendo por qué todavía, pero voy a tener una lectura. Gracias!
4) me acordaré de utilizar $ PWD en el futuro. En mi código original no necesita conocer el directorio actual ... esto era necesario para reducir esta versión.

Gracias de nuevo por toda su ayuda!
Closed Thread

Marcadores

Herramientas de hilo Buscar en este Hilo
Buscar en este Hilo:

Búsqueda avanzada
Modos de visualización Vota a este hilo
Vota a este hilo:

Normas de envío
puede que no nuevo puesto de hilos
puede que no enviar respuestas
puede que no enviar archivos adjuntos
puede que no editar sus puestos

Código BB es Encendido
Emoticones son Encendido
[IMG] código Encendido
Código HTML es Apagado
Trackbacks son Encendido
Pingbacks son Encendido
Refbacks son Encendido




Todas las horas son GMT -4. La hora es 03:01 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traducciones de idiomas Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Estudios
El UNIX y Linux Foros Contenido Copyright © 1993-2009. Todos los derechos Reserved.Ad Gestión por RedTyger

Las direcciones URL de contenido vBSEO 3.2.0