2009-02-25 12 views
3

Je souhaite rediriger la sortie d'un script bash vers un fichier.Redirection de sortie de terminal Linux

Le script est:

#!/bin/bash 
echo "recursive c" 
for ((i=0;i<=20;i+=1)); do 
time ./recursive 
done 

Mais si je lance comme ça:

script.sh >> temp.txt 

que la sortie de ./recursive sera capturé dans le fichier.

Je veux capturer la sortie de la commande de temps dans le fichier.

Répondre

8

Redirect STDERR à STDOUT:

script.sh >> temp.txt 2>&1 

Ou si vous utilisez bash 4.0:

$ script.sh &>> temp.txt 

(Merci pour la deuxième forme aller à COMMENTER ephemient Je ne peux pas vérifier que j'ai un plus tôt. bash.)


Mon les tests étaient surprenants:

$ time sleep 1 > /dev/null 2>&1 

real 0m1.036s 
user 0m0.002s 
sys  0m0.032s 

Le problème est que la redirection a été incluse dans la commande à temporiser. Il y avait là la solution pour ce test:

$ (time sleep 1) > /dev/null 2>&1 

Je ne pense pas que cela fait partie de votre problème, mais il semblait mérite une mention.

+0

Nouveau en bash 4.0: 'script.sh & >> temp.txt' fait la même chose que ci-dessus. :) – ephemient

2

Je préfère la méthode mieux, mais cela est une solution & >> ainsi:

$ script.sh 2>&1 |tee -a temp.txt 
+0

Oui, moi aussi. Vous pouvez voir la sortie dans la console et l'avoir dans le fichier aussi. – Raj

Questions connexes