¿Cómo comentar comandos de varias líneas en scripts de shell?

19

Al invocar comandos largos y pesados, es una buena práctica escribirlos en scripts de shell. ¿Hay una manera fácil de comentar líneas en dichos scripts? He probado los siguientes métodos, pero ninguno funciona.

# the \ is also commented out, resulting in "command" and "--good-switch".
command \
  #--bad-switch \
  --good-switch \

# seems to send an extra argument to the command
command \
  \ #--bad-switch \
  --good-switch

fuente
1
El segundo hace que se envíe un espacio como argumento ( \ escapa al siguiente carácter, que "oculta" nuevas líneas pero hace que los espacios sean significativos).
geekosaur

Respuestas:

14

Esta podría ser una opción: almacenar el comando y los argumentos en una matriz, luego ejecutarlo después

# build the command
cmd=( ls
        -F
      # -a   # comment out this option temporarily
        -l
    )
# $cmd is now an array with 3 elements

# execute it
"${cmd[@]}"
Glenn Jackman
fuente
Esto es bash
-solo
3

Siempre moví los comentados justo después del comando.

command \
  --good-switch
# --bad-switch          with explanation here, if needed
geekosaur
fuente
0

El problema es que las barras se eliminan antes de analizar la línea, por lo que el primer comando se analiza como si hubiera escrito command #--bad-switch --good-switch. Si tiene una secuencia de comandos realmente larga, podría, por ejemplo, escribir un bloque de comentarios línea por línea encima o debajo de él, explicando cada uno a su vez, o podría almacenar los parámetros en una variable (aunque eso a menudo le da dolores de cabeza entre comillas). caracteres especiales).

l0b0
fuente
1
Ese no parece ser el caso. --good-switchse interpreta como un comando.
0

un comentario frena la cadena de líneas conectadas, por lo que la solución más simple sería mover las líneas comentadas al final de la lista.

command \
  --good-switch \
  # --bad-switch \

Si no desea cambiar el orden, puede usar el :comando (la utilidad de dos puntos, que no hace nada) para mantener intactas las líneas conectadas:

command \
  `: --bad-switch `\
  --good-switch \

Probé con esto:

function command { 
  echo "num args:" $#;
}
rubo77
fuente