¿Qué significa

¿Qué significa

Me gustaría saber qué significan el menos (-) y el EOC en el siguiente comando. Sé que algunos lenguajes como Perl te permiten elegir cualquier combinación de caracteres (no vinculados a EOF), pero ¿es ese el caso aquí? Y el menos es un completo misterio para mí. ¡Gracias de antemano!

ftp -v -n $SERVER  >> $LOG_FILE <<-EOC
            user $USERNAME $PWD
            binary
            cd $DIR1
            mkdir $dir_lock
            get $FILE
            bye
EOC

Respuesta1

Esa es una redirección de documentos aquí.

command <<-word
here-document contents
word

El wordmétodo utilizado para delimitar el aquí-documento es arbitrario. Es común, pero no necesario, utilizar una palabra en mayúscula.

El -in <<-wordtiene el efecto de que las pestañas se eliminarán del principio de cada línea en el contenido del documento aquí.

cat <<-SERVICE_ANNOUNCEMENT
    hello
    world
SERVICE_ANNOUNCEMENT

Si el documento aquí anterior se escribiera con tabulaciones literales al comienzo de cada línea, daría como resultado el resultado

hello
world

en vez de

    hello
    world

Las pestañas antes del delimitador final también se eliminan con <<-(pero no sin -):

cat <<-SERVICE_ANNOUNCEMENT
    hello
    world
    SERVICE_ANNOUNCEMENT

(misma salida)

Respuesta2

De man bash:

   If the redirection operator is <<-, then all leading tab characters are
   stripped  from  input  lines  and  the line containing delimiter.  This
   allows here-documents within shell scripts to be indented in a  natural
   fashion.

información relacionada