J'ai le script bash suivant, d'après ce que je comprends >> est utilisé pour ajouter la sortie d'une commande à un fichier existant au lieu de l'écraser, mais que fait-il dans ce cas? Ce script appelle certains fichiers exe pour convertir d'un format à un autre. Il y a de nombreuses années pour chaque fichier, il parcourt donc chaque fichier en regardant le nom du fichier. De plus, lorsque j'exécute ce script, je reçois 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
bash
shell-script
io-redirection
Herman Toothrot
la source
la source
Réponses:
1>>
et2>>
sont des redirections pour des descripteurs de fichiers spécifiques, dans ce cas la sortie standard (descripteur de fichier 1) et l'erreur standard (descripteur de fichier 2).Le script redirige donc tous les messages "standard" vers
${jobout}
et tous les messages d'erreur vers${joberr}
. L'utilisation>>
dans les deux cas signifie que tous les messages sont ajoutés aux fichiers respectifs.Notez que
${jobout}
et${joberr}
prenez leurs valeurs des deux paramètres de ligne de commande dans 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 fournis, le script produira le message d'erreur de "redirection ambiguë" que vous avez vu; le script devrait vraiment vérifier si les paramètres ont été fournis et produire un message d'erreur approprié sinon, quelque chose commeau début du script.
la source
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ètres du script
la source
Comme il les paramètres sont pas de paramètres en appelant le script
$1
et$2
sont vides et sont donc$jobout
et$joberr
.Vous devez appeler le script comme ceci:
la source
>>
les opérateurs de redirection.