2010-12-06 55 views
2

J'ai le script shell suivant qui renvoie la sortie echos au journal et les erreurs à err_file. Cependant, je veux spécifiquement faire écho à certaines déclarations à stderr. Pls aiderksh echo vers stderr pour des instructions spécifiques

#!/bin/ksh 
echo "paramPassed: $0 $#" 

err_file="error_file.txt" 
new_file="new_file.txt" 

exec >> ${new_file} 
#exec >> ${new_file} 2>${err_file} 
#exec >> ${new_file} 2>&1 

if [ $# -eq 1 ]; then 
    username=$1 
fi 

userInfo=$(paramInfo ${username} | awk -F: '{print $2}') 
echo ${userInfo} 

rcp ${err_file} mtvst32:/rcs/ver34/${err_file} 

if [ $? -ne 0 ]; then 
     #This doesn't work. Need the following to go to console 
     echo "UserInfo.SH FAILED copy to mtvst32" >> &2; 
fi 

Je souhaite envoyer la sortie de la dernière si la condition de std erreur cependant, ne pouvait pas comprendre comment le faire.

Répondre

8

Je suppose que vous recevez un message d'erreur. Cela aurait été utile si vous l'aviez posté. Cependant, cela est susceptible de résoudre votre problème:

echo "UserInfo.SH FAILED copy to mtvst32" >&2 

Retirez l'espace et l'un des >.

+0

Merci Dennis. Ça a marché. ce que je voulais réellement était ce: du même code ci-dessus exec >> $ {nouveau_fichier} 2> & 1 et envoyer uniquement la dernière déclaration d'écho à la console. Y'a-t'il un quelconque moyen d'y arriver? En d'autres termes, toutes les erreurs doivent aller dans le même fichier sauf pour ce qui suit: if [$? -ne 0]; then # Cela ne fonctionne pas. Besoin de ce qui suit pour aller à la console echo "UserInfo.SH FAILED copy to mtvst32"> & 2; fi que je veux envoyer à la console. Cependant dans le cas ci-dessus, il va dans le nouveau fichier en raison de la redirection. Merci. – Kiran

+0

@Kiran: Avant votre 'exec >> $ {nouveau_fichier} 2> & 1' (j'ai ignoré cela parce qu'ils ont été commentés dans votre question), ajoutez' exec 3> & 2' pour copier FD 2 à FD 3. Alors votre écho à la console sera 'echo" ... "> & 3'. –

+0

Doux .. merci Dennis. Ça marche. – Kiran