2010-06-01 10 views
0
function grabSourceFile 
{ 
     cd /tmp/lmpsource 
     wget $1 > $LOG 
     baseName=$(basename $1) 
     tar -xvf $baseName > $LOG 
     cd $baseName 
} 

Lorsque j'appelle cette fonction La sortie capturée ne va pas dans le fichier journal. La redirection de sortie fonctionne bien jusqu'à ce que j'appelle la fonction. La variable $ LOG est définie en haut du fichier. J'ai essayé de faire écho des déclarations et ils n'imprimeraient pas. Je suppose que la fonction capture la sortie elle-même? Si oui, comment pousser la sortie vers le fichier au lieu de la console. (Le wget ci-dessus imprime sur console, tandis qu'un écho à l'intérieur de la fonction ne fait rien.)Script Bash/shell - redirection de sortie shell à l'intérieur d'une fonction

+0

Je ne traiterait pas avec la redirection de sortie à l'intérieur des fonctions. Utilisez exec pour configurer/restaurer les redirections de sortie sur STDERR/STDOUT: exec 3> & 2 2> /tmp/error.log; DOSOMETHING; exec 2> & 3; –

Répondre

1

J'ai trouvé le problème. C'était avec wget. wget a une option spécifique pour l'exploitation forestière que je suppose qu'il ne peut pas avoir sa sortie redirigée en utilisant la> Ma fonction de travail a fini par être (quelque chose avec malédictions.):

function grabSourceFile 
{ 
     cd /tmp/lmpsource 
     wget -a /tmp/lamps_install.log $1 
     baseName=$(basename $1) 
     tar -xvf $baseName >> $LOG 
     cd $baseName 
} 
+0

Je pense que vous avez raison de dire que 'wget http://www.example.org> tmp/wget.log' ne fonctionne pas (Doesn ne travaille pas pour moi non plus, je travaille sur un problème similaire). Notez également que dans votre première commande, vous utilisez 'tar -xvf $ baseName> $ LOG', ce qui écrasera $ LOG. Votre deuxième itération fait '>> $ LOG' qui s'ajoute à $ LOG. –

1

La redirection fonctionne de la même manière à l'intérieur et à l'extérieur des fonctions.

Votre problème est probablement que vous voulez un double plus grand que le signe plutôt qu'un seul signe supérieur. C'est à dire. wget $1 >> $LOG. La redirection sur votre commande tar tronque la sortie de wget.

+3

Pour plus de clarté, '>>' s'ajoute au fichier alors que '>' l'écrase –

2

Comme mentionné précédemment, vous écrivez le même fichier journal deux fois. Votre fonction enregistre la sortie de 'wget' et écrase ensuite cette sortie plus tard, avec la commande tar.

Moi, j'aime me déconnecter des fonctions. Cela réduira les chances que votre fichier journal soit clobé. Il garde également le code de fonction propre et bien rangé.

function grabSourceFile 
{ 
     cd /tmp/lmpsource 
     wget $1 
     baseName=$(basename $1) 
     tar -xvf $baseName 
     cd $baseName 
} >> $LOG 

Ou tout simplement faire:

grabSourceFile >> $LOG