Bloquear comentarios en un Script de Shell
¿Hay una forma sencilla de comentar un bloque de código en un script de shell?
10 answers
En bash:
#!/bin/bash
echo before comment
: <<'END'
bla bla
blurfl
END
echo after comment
El '
y '
alrededor del delimitador END
son importantes, de lo contrario las cosas dentro del bloque como por ejemplo $(command)
serán analizadas y ejecutadas.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-23 14:17:14
No hay ningún comentario de bloque en el script de shell.
Usando vi
(sí, vi
) puedes comentar fácilmente desde la línea n hasta m
<ESC>
:10,100s/^/#/
(que se lee, de la línea 10 a 100 sustituir inicio de línea ( ^ ) con un signo#.)
Y un comentario con
<ESC>
:10,100s/^#//
(que se lee, de la línea 10 a la línea 100 sustituir inicio ( ^ ) seguido de # con la nota //.)
vi
es casi universal en cualquier lugar donde hay /bin/sh
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-02 20:37:49
Puedes usar:
if [ 1 -eq 0 ]; then
echo "The code that you want commented out goes here."
echo "This echo statement will not be called."
fi
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-10 15:45:55
Lo siguiente debería funcionar para sh
,bash
, ksh
y zsh
.
Los bloques de código a comentar se pueden poner dentro de BEGINCOMMENT
y ENDCOMMENT
:
[ -z $BASH ] || shopt -s expand_aliases
alias BEGINCOMMENT="if [ ]; then"
alias ENDCOMMENT="fi"
BEGINCOMMENT
echo "This line appears in a commented block"
echo "And this one too!"
ENDCOMMENT
echo "This is outside the commented block"
Ejecutar el código anterior resultaría en:
This is outside the commented block
Para descomentar los bloques de código así comentados, digamos
alias BEGINCOMMENT="if : ; then"
En lugar de
alias BEGINCOMMENT="if [ ]; then"
En el ejemplo anterior.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-11 11:20:06
Si puedes esquivar las comillas simples:
__='
blah blah comment.
'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-16 16:38:06
En Vim:
- ir a la primera línea del bloque que desea comentar
-
shift-V
(entrar en modo visual), arriba abajo resalte las líneas en el bloque - ejecute lo siguiente en la selección
:s/^/#/
-
El comando se verá así:
:'<,'>s/^/#
-
Pulsa enter
Por ejemplo
shift-V
jjj
:s/^/#
<enter>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-04 00:54:50
Puedes usar el modo de bloqueo visual de Vi/Vim que está diseñado para cosas como esta:
Ctrl-V
Highlight first element in rows you want commented
Shift-i
#
esc
El comentario sería:
Ctrl-V
Highlight #'s
d
l
Esta es la forma interactiva de vi de hacer este tipo de cosas en lugar de contar o leer números de línea.
Por último, en Gvim se usa ctrl-q para entrar en el modo de bloqueo visual en lugar de ctrl-v (porque ese es el atajo para pegar).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-06 23:02:14
Tanta sobreingeniería...
Considero realmente una mala práctica escribir código activo para generar código pasivo.
Mi solución: la mayoría de los editores tienen el modo de selección de bloques. Solo úsalo para agregar # a todas las líneas que quieras comentar. ¿Cuál es el problema?..
Ejemplo de bloc de notas:
Para crear: Alt - mousedrag down, pulse #.
Para eliminar: Alt-ratonera abajo, shift-flecha derecha, eliminar.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-27 15:35:08
Una variación del truco de here-doc en la respuesta aceptada por sunny256 es usar las palabras clave de Perl para los comentarios. Si sus comentarios son en realidad algún tipo de documentación, puede comenzar a usar la sintaxis de Perl dentro del bloque comentado, que le permite imprimirlo con un formato agradable, convertirlo en una página de manual, etc.
En lo que respecta al shell, solo necesita reemplazar 'END'
por '=cut'
.
echo "before comment"
: <<'=cut'
=pod
=head1 NAME
podtest.sh - Example shell script with embedded POD documentation
etc.
=cut
echo "after comment"
(Se encuentra en " Incrustando documentación en shell guión")
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-15 11:04:10
Otro modo es: Si su editor NO TIENE opción DE comentario de BLOQUE,
- Abra una segunda instancia del editor (por ejemplo File=>New File...)
- Del archivo ANTERIOR en el que está trabajando, seleccione SOLO LA PARTE QUE DESEA COMENTAR
- Cópielo y péguelo en la ventana del nuevo archivo temporal...
- Abra el menú Editar, seleccione REEMPLAZAR e ingrese como cadena a reemplazar'\n '
- entrada como cadena de reemplazo: '\n# '
- presione el botón 'reemplazar TODOS "
HECHO
FUNCIONA con CUALQUIER editor
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-10 13:23:17