![]() |
Hola y bienvenida de los Estados Unidos a la UNIX y Linux Foros! Gracias por su visita y formar parte de nuestra comunidad global.
|
|
google unix.com
|
|||||||
| Foros | Registro | Reglas de los Foros | Enlaces | Álbumes | Preguntas más frecuentes | Lista de miembros | Calendario | Búsqueda | Puestos de hoy | Marcar Foros Como Leídos |
| 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 |
| función de correo problema | jwholey | Programación de scripts de shell y | 4 | 05-01-2008 12:21 PM |
| Problema debido a la secuencia de comandos de directorios recursivo Ayuda por favor | robertmcol | Programación de scripts de shell y | 2 | 04-27-2008 08:00 PM |
| Función del problema y CoreDump | Zingaro | Programación de scripts de shell y | 8 | 02-19-2008 06:37 PM |
| función recursiva | bebop1111116 | Programación de Alto Nivel | 1 | 10-30-2006 08:12 PM |
| PERL función problema | avadhani | Programación de scripts de shell y | 2 | 06-15-2005 05:18 AM |
![]() |
|
|
Linkback vínculo | Herramientas de hilo | Buscar en este Hilo | Tasa de Hilo | Modos de visualización |
|
|
|
||||
|
Problema con la función recursiva
Hola a todos,
Tengo que mover todos los archivos en un árbol de la estructura de directorios a un solo directorio. A fin de saber qué archivo es el directorio desde el cual, tendré que añadir el nombre del directorio para el nombre del archivo. Para ello he escrito una función recursiva que es el siguiente --------------------------------------------- datamover () ( cd $ 1 # OLD_DIR \u003d $ 2 i en * hacer if [-d $ i] entonces $ I \u003d TMP_DIR datamover $ TMP_DIR echo $ i algo más mv $ i .. / $ i $ 1_ if [-f $ 1 /] entonces eco de algunos archivos todavía existen algo más cd .. rmdir $ 1 fi fi hecho ) -------------------------------------------------- -------------- Cuando se ejecute cada vez que el mismo en una estructura de directorios como Dira -> DirB -> DirL -> fileN -> DirM -> fileO ---> DirC -> DirP -> Filer -> DirQ -> archivos el programa está dando la salida de la siguiente manera Dira -> DirB -> DirL_fileN -> DirM_fileO ---> DirC -> DirP -> Filer -> DirQ -> archivos y la depuración ouptut es la siguiente -------------------------------------------------- ---- + Dir. Nombre echo es Dira Nombre dir es Dira + \u003d MAIN_DIR Dira + Datamover Dira + Cd Dira + '['-D DirB ']' + TMP_DIR \u003d DirB + Datamover DirB + Cd DirB + '['-D DirL ']' + TMP_DIR \u003d DirL + Datamover DirL + Cd DirL + '['-D fileN ']' + Mv fileN .. / DirL_fileN + '['-F DirL / ']' + Cd .. + Rmdir DirL + Eco fileN fileN + '['-D DirM ']' + TMP_DIR \u003d DirM + Datamover DirM + Cd DirM + '['-D fileO ']' + Mv fileO .. / DirM_fileO + '['-F DirM / ']' + Cd .. + Rmdir DirM + Eco fileO fileO + Eco fileO fileO + '['-D DirC ']' + Mv DirC .. / DirA_DirC mv: no se puede estadísticas »DirC ': No such file or directory + '['-F Dira / ']' + Cd .. + Rmdir Dira rmdir: «Dira ': No such file or directory -------------------------------------------------- ------------ ¿Puede alguien decirme wht es el problema con el código y cómo solucionarlo? i exigir la salida en este escenario será el Dira -> DirB_DirL_fileN -> DirB_DirM_fileO -> DirC_DirP_fileR -> DirC_DirQ_fileS Gracias de antemano |
|
||||
|
Cita:
El guión original a causa de la falla i en * declaración El * es evaluado al comienzo de la función y no se anticipan en los archivos que se trasladó a un subdirectorio del directorio. |
|
||||
|
zazzybob la solución es una solución simple y elegante.
En respuesta a la recursión en una función de shell Korn, hay dos puntos a considerar. Todas las variables, incluyendo el directorio de trabajo actual, son de alcance mundial a menos que se define con la función que a su vez hace que sean locales en la función. Código:
typeset FILENAME=/etc/hosts
Function ()
{
FILENAME=/etc/resolv.conf
echo $FILENAME
}
echo $FILENAME
Function
echo $FILENAME
/ etc / hosts / etc / resolv.conf / etc / resolv.conf Sin embargo, Código:
typeset FILENAME=/etc/hosts
Function ()
{
typeset FILENAME
FILENAME=/etc/resolv.conf
echo $FILENAME
}
echo $FILENAME
Function
echo $FILENAME
/ etc / hosts / etc / resolv.conf / etc / hosts Una rápida y sucia manera de hacer que las variables locales a la función INCLUYENDO es el directorio de trabajo para ejecutar la función en su propio depósito, colocando paréntesis dentro de la función entre corchetes. La función de obtener su propia copia del medio ambiente cuando se les llama y los cambios, incluyendo el directorio, para que el medio ambiente no se refleja en el script que está llamando a su propia función. Código:
typeset FILENAME=/etc/hosts
Function ()
{ (
FILENAME=/resolv.conf
echo $FILENAME
) }
echo $FILENAME
Function
echo $FILENAME
/ etc / hosts / etc / resolv.conf / etc / hosts Última edición por hegemaro; al 02-03-2007 10:41 AM.. |
|
||||
|
Gracias zazzybob. La solución fue fantástico.
Gracias a todos los que han dado algunas pistas más acerca de la solución. |
![]() |
| Marcadores |
| Herramientas de hilo | Buscar en este Hilo |
| Modos de visualización | Vota a este hilo |
|
|