Tengo el siguiente script bash, por lo que entiendo >> se usa para agregar la salida de un comando a un archivo existente en lugar de sobrescribir, pero ¿qué está haciendo en este caso? Este script está llamando a algunos archivos exe para convertir de un formato a otro. Hay muchos años para cada archivo, por lo que recorre cada archivo mirando el nombre del archivo. Además, cuando ejecuto este script obtengo "redirección ambigua"
#!/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
fuente
fuente
Respuestas:
1>>
y2>>
son redirecciones para descriptores de archivo específicos, en este caso la salida estándar (descriptor de archivo 1) y el error estándar (descriptor de archivo 2).Por lo tanto, el script redirige todos los mensajes "estándar"
${jobout}
y todos los mensajes de error${joberr}
. El uso>>
en ambos casos significa que todos los mensajes se agregan a los archivos respectivos.Tenga en cuenta eso
${jobout}
y${joberr}
tome sus valores de los dos parámetros de la línea de comandos al script (${1}
y${2}
), por lo que debe especificar los archivos que desea usar para almacenar los mensajes. Si no se proporcionan los parámetros, el script generará el mensaje de error de "redirección ambigua" que ha visto; el script realmente debería verificar si los parámetros se han proporcionado y generar un mensaje de error apropiado, de lo contrario,Al comienzo del guión.
fuente
En su caso 1 >> agregue la información del controlador stdout actual al archivo $ {jobout} 2 >> agregue la información del controlador stderr actual al archivo $ {joberr}
jobout y joberr son archivos, definidos como primer y segundo parámetro del script
fuente
Como no hay parámetros al llamar a la secuencia de comandos, los parámetros
$1
y$2
están vacíos y también lo están$jobout
y$joberr
.Debe llamar al script de esta manera:
fuente
>>
operadores de redireccionamiento.