unix - resueltos - Comentando un conjunto de líneas en un script de shell
scripts linux ejercicios resueltos (10)
Me preguntaba si hay una manera de comentar un conjunto de líneas en un script de shell. ¿Cómo podría hacer eso? Podemos usar / * * / en otros lenguajes de programación. Esto es más útil cuando estoy convirtiendo / usando / modificando otro script y quiero mantener las líneas originales en lugar de eliminarlas.
Parece un trabajo engorroso para buscar y prefijo # para todas las líneas que no se utilizan.
Digamos que hay 100 líneas en la secuencia de comandos en líneas consecuentes que no se utilizan. Quiero comentarlos todos de una vez. ¿Es eso posible?
¿Qué pasa si simplemente envuelve su código en función?
Así que esto:
cd ~/documents
mkdir test
echo "useless script" > about.txt
Se convierte en esto:
CommentedOutBlock() {
cd ~/documents
mkdir test
echo "useless script" > about.txt
}
Dependiendo del editor que estés usando, hay algunos accesos directos para comentar un bloque de líneas.
Otra solución sería colocar su código en un bloque condicional "if (0)";)
El método más versátil y seguro es poner el comentario en un vacío citado here-document
, como este:
<<"COMMENT"
This long comment text includes ${parameter:=expansion}
`command substitution` and $((arithmetic++ + --expansion)).
COMMENT
Es necesario citar el delimitador COMMENT
anterior para evitar la expansión de parámetros, la sustitución de comandos y la expansión aritmética, lo que ocurriría de otro modo, como lo specifies manual de Bash y el estándar de shell POSIX.
En el caso anterior, no citar COMMENT
daría como resultado parameter
se asignara expansion
texto al parameter
variable, si estaba vacío o sin configurar, ejecutando la command substitution
, incrementando la variable arithmetic
y disminuyendo la expansion
variable.
Comparando otras soluciones a esto:
Usando if false; then comment text fi
if false; then comment text fi
requiere que el texto de comentario sea sintácticamente correcto. Código de Bash, mientras que los comentarios naturales a menudo no lo son, aunque solo sea por posibles apóstrofes desequilibrados. Lo mismo ocurre con : || { comment text }
: || { comment text }
construir.
Poner los comentarios en un argumento de comando nulo entre comillas, como en :''comment text''
, tiene el inconveniente de no poder incluir apóstrofes. Los argumentos entre comillas dobles, como en :"comment text"
, todavía están sujetos a la expansión de parámetros, la sustitución de comandos y la expansión aritmética, lo mismo que el contenido del documento aquí no citado y puede llevar a los efectos secundarios descritos anteriormente.
Usar scripts y herramientas de edición para prefijar automáticamente cada línea en un bloque con ''#'' tiene algún mérito, pero no responde exactamente a la pregunta.
Este Perl one-liner comenta las líneas 1 a 3 del archivo orig.sh
inclusive (donde la primera línea tiene el número 0) y escribe la versión comentada en cmt.sh
perl -n -e ''$s=1;$e=3; $_="#$_" if $i>=$s&&$i<=$e;print;$i++'' orig.sh > cmt.sh
Obviamente, puede cambiar los números de límite según sea necesario.
Si desea editar el archivo en su lugar, es aún más corto:
perl -in -e ''$s=1;$e=3; $_="#$_" if $i>=$s&&$i<=$e;print;$i++'' orig.sh
Manifestación
$ cat orig.sh
a
b
c
d
e
f
$ perl -n -e ''$s=1;$e=3; $_="#$_" if $i>=$s&&$i<=$e;print;$i++'' orig.sh > cmt.sh
$ cat cmt.sh
a
#b
#c
#d
e
f
Los editores de texto tienen una característica sorprendente llamada buscar y reemplazar. No dices qué editor usas, pero como los scripts de shell tienden a ser * nix, y yo uso VI, este es el comando para comentar las líneas 20 a 50 de algunos de los scripts de shell:
:20,50s/^/#/
Puede usar un documento ''aquí'' sin comando para enviarlo.
#!/bin/bash
echo "Say Something"
<<COMMENT1
your comment 1
comment 2
blah
COMMENT1
echo "Do something else"
Según este site :
#!/bin/bash
foo=bar
: ''
This is a test comment
Author foo bar
Released under GNU
''
echo "Init..."
# rest of script
También puedes poner comentarios multilínea usando:
: ''
comment1comment1
comment2comment2
comment3comment3
comment4comment4
''
De acuerdo con la referencia Bash para Bourne Shell builtins
: (dos puntos)
: [argumentos]
No haga nada más que expandir argumentos y realizar redirecciones. El estado de retorno es cero.
Gracias a Ikram por señalar esto en el script de Shell posterior al comentario de varias líneas.
if false
then
...code...
fi
false
siempre devuelve false por lo que siempre se saltará el código.
: || {
your code here
your code here
your code here
your code here
}