![]() |
|
|
google unix.com
|
|||||||
| Forum | Registrati | Regole Forum | Collegamenti | Album | FAQ | Members List | Calendario | Ricerca | Today's Posts | Mark Forums Read |
| 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 |
| funzione mail problema | jwholey | Shell scripting e di programmazione | 4 | 05-01-2008 12:21 PM |
| Script problema dovuto alla directory ricorsive Aiuto per favore | robertmcol | Shell scripting e di programmazione | 2 | 04-27-2008 08:00 PM |
| Funzione problema e coredump | ZINGARO | Shell scripting e di programmazione | 8 | 02-19-2008 06:37 PM |
| funzione ricorsiva | bebop1111116 | Di programmazione ad alto livello | 1 | 10-30-2006 08:12 PM |
| PERL funzione problema | avadhani | Shell scripting e di programmazione | 2 | 06-15-2005 05:18 AM |
![]() |
|
|
LinkBack | Thread Tools | Cerca in questo Thread | Rate Thread | Modalità di visualizzazione |
|
|
|
||||
|
Problema con funzione ricorsiva
Ciao a tutti,
Ho per spostare tutti i file in un albero di struttura di directory per una singola directory. Inorder di sapere quale file è da quale directory, mi dovrete aggiungere il nome della directory per il nome del file. Per questo ho scritto una funzione ricorsiva, che è la seguente --------------------------------------------- datamover () ( cd $ 1 # OLD_DIR \u003d $ 2 for i in * fare if [-d $ i] allora TMP_DIR $ i \u003d datamover $ TMP_DIR echo $ i altro mv $ i .. / 1_ $ $ i if [-f $ 1 /] allora echo alcuni file esistono ancora altro cd .. rmdir $ 1 fi fi fatto ) -------------------------------------------------- -------------- Quando mai ho eseguito lo stesso su una struttura di directory come DIRA -> DirB -> DirL -> fileN -> DirM -> fileO ---> DirC -> DirP -> filer -> DirQ -> file il programma è che l'output come segue DIRA -> DirB -> DirL_fileN -> DirM_fileO ---> DirC -> DirP -> filer -> DirQ -> file e il debug ouptut è il seguente -------------------------------------------------- ---- + Eco Dir. Nome DIRA Dir. Nome 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: non può stat `DirC ': Nessun file o directory + '['-F DIRA / ']' + Cd .. + Rmdir DIRA rmdir: `DIRA ': Nessun file o directory -------------------------------------------------- ------------ Can anybody tell me WHT il problema con il codice e come correggerle? i richiedono l'uscita in questo scenario sarà come DIRA -> DirB_DirL_fileN -> DirB_DirM_fileO -> DirC_DirP_fileR -> DirC_DirQ_fileS Grazie in anticipo |
|
||||
|
Citazione:
La sceneggiatura non originale a causa della for i in * affermazione * La linea è valutato al inizio della funzione e non anticipare il file che si trasferisce a directory da una sottodirectory. |
|
||||
|
zazzybob La soluzione è un elegante e semplice soluzione. In risposta alla ricorsione Korn shell all'interno di una funzione, vi sono due punti da considerare. Tutte le variabili, tra cui l'attuale directory di lavoro, a meno che siano specificamente definite a livello mondiale con la funzione che poi li rende locale entro la funzione. Codice:
typeset FILENAME=/etc/hosts
Function ()
{
FILENAME=/etc/resolv.conf
echo $FILENAME
}
echo $FILENAME
Function
echo $FILENAME
produrrebbe / etc / hosts / etc / resolv.conf / etc / resolv.conf Comunque, Codice:
typeset FILENAME=/etc/hosts
Function ()
{
typeset FILENAME
FILENAME=/etc/resolv.conf
echo $FILENAME
}
echo $FILENAME
Function
echo $FILENAME
produrrebbe / etc / hosts / etc / resolv.conf / etc / hosts Un rapido e sporco modo per rendere le variabili locali alla funzione COMPRESI la directory di lavoro è quello di eseguire la funzione nel proprio guscio mettendo parentesi all'interno della funzione parentesi. La funzione di ottenere la propria copia di chiamata quando l'ambiente e le eventuali modifiche, compresa la directory, in questo ambiente non saranno riflesse nella chiamata di script che è la sua propria funzione. Codice:
typeset FILENAME=/etc/hosts
Function ()
{ (
FILENAME=/resolv.conf
echo $FILENAME
) }
echo $FILENAME
Function
echo $FILENAME
produrrebbe / etc / hosts / etc / resolv.conf / etc / hosts Ultimo a cura di hegemaro; al 02/03/2007 10:41 AM.. |
![]() |
| Segnalibri |
| Thread Tools | Cerca in questo Thread |
| Modalità di visualizzazione | Vota questo thread |
|
|