![]() |
|
|
google unix.com
|
|||||||
| Fóruns | Registar | Fórum Regimento | Ligações | Álbuns | FAQ | Lista deputados | Calendário | Pesquisa | Today's Posts | Mark Forums Read |
| Programação Shell Script e Post perguntas sobre ksh, CSH, SH, BASH, Perl, PHP, SED, Awk e outros scripts shell e shell scripts línguas aqui. |
Mais UNIX e Linux Fórum Tópicos Você pode achar Helpfull
|
||||
| Fio | Thread Starter | Fórum | Respostas | Última postagem |
| mail função problema | jwholey | Programação Shell Script e | 4 | 05-01-2008 12:21 |
| Script problema devido ao recursivas diretórios Ajuda por favor | robertmcol | Programação Shell Script e | 2 | 04-27-2008 08:00 |
| Função Problema e coredump | Zingaro | Programação Shell Script e | 8 | 02-19-2008 06:37 |
| função recursiva | bebop1111116 | Alto Nível de programação | 1 | 10-30-2006 08:12 |
| PERL função problema | avadhani | Programação Shell Script e | 2 | 06-15-2005 05:18 |
![]() |
|
|
Linkback | Thread Tools | Pesquisar este Thread | Rate Thread | Display Modes |
|
|
|
||||
|
Problema com função Recursiva
Oi tudo,
Tenho que passar todos os arquivos em uma árvore diretório estrutura para um único diretório. Inorder para saber qual arquivo é a partir do qual diretório, vou ter de adicionar o nome do diretório com o nome de arquivo. Por isso eu escrevi uma função recursiva que é o seguinte --------------------------------------------- datamover () ( cd $ 1 # OLD_DIR \u003d $ 2 for i in * fazer if [-d $ i] então TMP_DIR $ i \u003d datamover $ TMP_DIR echo $ i diferente mv $ i .. / $ 1_ $ i if [-f $ 1 /] então echo alguns ficheiros ainda existem diferente cd .. rmdir $ 1 fi fi feito ) -------------------------------------------------- -------------- Quando eu nunca executar o mesmo em uma estrutura de diretório como DIRA -> DirB -> DirL -> filen -> DirM -> fileO ---> DirC -> DirP -> filer -> DirQ -> arquivos o programa está dando o resultado como segue DIRA -> DirB -> DirL_fileN -> DirM_fileO ---> DirC -> DirP -> filer -> DirQ -> arquivos e de depuração ouptut é o seguinte -------------------------------------------------- ---- + Echo Dir Nome é DIRA Dir Nome é DIRA + \u003d MAIN_DIR DIRA + Datamover DIRA + Cd DIRA + '[' DirB-d ']' + TMP_DIR \u003d DirB + Datamover DirB + Cd DirB + '[' DirL-d ']' + TMP_DIR \u003d DirL + Datamover DirL + Cd DirL + '[' Filen-d ']' + Mv filen .. / DirL_fileN + '['-F DirL / ']' + Cd .. + Rmdir DirL + Echo filen filen + '[' DirM-d ']' + TMP_DIR \u003d DirM + Datamover DirM + Cd DirM + '[' FileO-d ']' + Mv fileO .. / DirM_fileO + '['-F DirM / ']' + Cd .. + Rmdir DirM + Echo fileO fileO + Echo fileO fileO + '[' DirC-d ']' + Mv DirC .. / DirA_DirC mv: cannot stat `DirC ': Nenhum tal lima ou diretório + '['-F DIRA / ']' + Cd .. + Rmdir DIRA rmdir: `dira ': Nenhum tal lima ou diretório -------------------------------------------------- ------------ Alguém pode me dizer WHT é o problema com o código e como corrigi-lo? i exigir a saída, neste cenário, será a DIRA -> DirB_DirL_fileN -> DirB_DirM_fileO -> DirC_DirP_fileR -> DirC_DirQ_fileS Thanks in Advance |
|
||||
|
Citação:
O original script falhar devido à for i in * declaração A * é avaliada no início da função e não antecipar em arquivos movidos para o directório de um subdirectório. |
|
||||
|
zazzybob da solução é uma solução simples e elegante. Em resposta a recursão Korn shell dentro de uma função, existem dois pontos a considerar. Todas as variáveis, incluindo o atual diretório de trabalho, são globais, salvo se especificamente definidas com a função que, em seguida, torna-os locais dentro da função. Código:
typeset FILENAME=/etc/hosts
Function ()
{
FILENAME=/etc/resolv.conf
echo $FILENAME
}
echo $FILENAME
Function
echo $FILENAME
iria produzir / etc / hosts / etc / resolv.conf / etc / resolv.conf Contudo, Código:
typeset FILENAME=/etc/hosts
Function ()
{
typeset FILENAME
FILENAME=/etc/resolv.conf
echo $FILENAME
}
echo $FILENAME
Function
echo $FILENAME
iria produzir / etc / hosts / etc / resolv.conf / etc / hosts Uma maneira rápida e suja variáveis locais para fazer a função INCLUINDO o diretório está trabalhando para executar a função no seu próprio reservatório, colocando parêntesis dentro da função entre parênteses. A função vai ficar a sua própria cópia do ambiente quando chamado e eventuais alterações, incluindo o diretório, para que o ambiente não será refletida na chamada script que faz a sua própria função. Código:
typeset FILENAME=/etc/hosts
Function ()
{ (
FILENAME=/resolv.conf
echo $FILENAME
) }
echo $FILENAME
Function
echo $FILENAME
iria produzir / etc / hosts / etc / resolv.conf / etc / hosts Última edição por hegemaro; em 02/03/2007 10:41.. |
![]() |
| Marcadores |
| Thread Tools | Pesquisar este Thread |
| Display Modes | Esta taxa Thread |
|
|