Jai le script bash suivant, daprès ce que je comprends >> est utilisé pour ajouter la sortie dune commande à un fichier existant au lieu de lécraser, mais quoi fait-il dans ce cas? Ce script appelle certains fichiers exe à convertir dun format à un autre. Il y a plusieurs années pour chaque fichier, donc il parcourt chaque fichier en regardant le nom du fichier. Aussi quand jexécute ce script, jobtiens une « redirection ambiguë »
#!/bin/bash source $HOME/.bashrc jobout=${1} joberr=${2} # Set some paths and prefixes yr_bgn=2000 yr_end=2000 yr=${yr_bgn} pth_data="/mnt/" pth_rst="/mnt/" while [ ${yr} -le ${yr_end} ] do ./executable1 ${pth_data}file${yr}-${yr}.nc ${yr} ${pth_rst} 1>> ${jobout} 2>> ${joberr} ./executable2 ${pth_data}file${yr}-${yr}.nc ${yr} ${pth_rst} 1>> ${jobout} 2>> ${joberr} ./executable3 ${pth_data}file${yr}-${yr}.nc ${yr} ${pth_rst} 1>> ${jobout} 2>> ${joberr} let yr=${yr}+1 done
Commentaires
- Comment faites-vous appeler ce script?
- duplication possible de Redirection ambiguë effectuée > 2 $
- @HaukeLaging, non, ce nest pas le cas. La question semble concerner quelque chose de proche, mais pas le même
- @RomeoNinov Pourriez-vous expliquer la différence pertinente?
- @HaukeLaging le script est enregistré dans un fichier .sh. Je viens de taper ./myscript.sh
Réponse
1>>
et 2>>
sont des redirections pour des descripteurs de fichiers spécifiques, dans ce cas la sortie standard (descripteur de fichier 1) et lerreur standard (descripteur de fichier 2).
Donc le script redirige tous les messages « standard » vers ${jobout}
et tous les messages derreur vers ${joberr}
. Utiliser >>
dans les deux cas signifie que tous les messages sont ajoutés aux fichiers respectifs.
Notez que ${jobout}
et ${joberr}
prennent leurs valeurs des deux paramètres de ligne de commande vers le script (${1}
et ${2}
) , vous devez donc spécifier les fichiers que vous souhaitez utiliser pour stocker les messages. Si les paramètres ne sont pas donnés, le script produira le message derreur « redirection ambiguë » que vous avez vu; le script doit vraiment vérifier si les paramètres ont été fournis et produire un message derreur approprié sinon, quelque chose comme
if [ -z "$1" -o -z "$2" ]; then echo "Log files for standard and error messages must be specified" echo "${0} msgfile errfile" exit 1 fi
au début du script.
Réponse
Dans votre cas 1 >> ajoutez les informations du gestionnaire stdout actuel au fichier $ {jobout} 2 >> ajoutez les informations du gestionnaire stderr actuel au fichier $ {joberr}
jobout et joberr sont des fichiers, définis comme premier et deuxième paramètre du script
Réponse
Comme il ny a pas de paramètres pour appeler le script, les paramètres $1
et $2
sont vides, de même que $jobout
et $joberr
.
Vous devez appeler le script comme ceci:
./myscript.sh file1 file2
Commentaires
- Les numéros de paramètres nont rien à voir avec les nombres avant les opérateurs de redirection
>>
. - Quà cela ne tienne, je vous vois ' répondre à la partie sur la redirection ambiguë, pas à la question dans le titre. Vous devriez probablement clarifier votre réponse à ce sujet.