2010-03-26 17 views
96

Me gustaría poder comentar un solo indicador en un comando de una línea. Bash solo parece tener from # till end-of-line comentarios. Estoy viendo trucos como:Comentarios en línea para Bash?

ls -l $([ ] && -F is turned off) -a /etc 

Es feo, pero es mejor que nada. ¿Hay una mejor manera?

El siguiente parece que funciona, pero no estoy seguro de si es portátil:

ls -l `# -F is turned off` -a /etc 
+0

El 'truco # comment' también se menciona aquí: http://stackoverflow.com/questions/9522631/bash-how-to-put-line-comment-for-a-multi-line-command –

+0

Siguiendo el [enlace] (http://stackoverflow.com/a/12797512/1342186) mencionado por @Juha Palomäki , hay un truco maravilloso '$ {IFS # comment}' introducido por @pjh en los comentarios. No se invoca subcuadro. – alexis

Respuesta

14

$(: ...) es un poco menos feo, pero aún así no es bueno.

+0

Con esta sintaxis está activando un subconjunto, se propone un comentario para mejorar la redacción sin cambiar el comportamiento del código, pero el tiempo para lauch/end este subconjunto hará que su código sea más lento (por decir lo menos) ¿Por qué no usar solo los dos puntos al comienzo de una nueva línea? – Rafareino

+0

Con $ {IFS # ...} no se invoca subcuadro. – alexis

+0

@Rafareino: sí. Pero en serio, en el 95% de las aplicaciones, estos gastos generales no importarán en absoluto. Para muchos de los casos donde sí importa, probablemente hubiera sido una buena idea usar un lenguaje más rápido que Bash en primer lugar. – leftaroundabout

0

Si el comentario vale la pena, probablemente puede ir al final de la línea, o en una línea en sí mismo. Rara vez encuentro necesario hacer comentarios dentro de la línea con el código antes y después del comentario en cualquier idioma.

Oh, hay una excepción, que es el dialecto de SQL que suelo usar que usa '{comments}'. Ocasionalmente, escribiré:

CREATE UNIQUE INDEX u1_table ON Table(...); 
CREATE {DUPS} INDEX d1_table ON Table(...); 

Pero incluso eso es un tramo.

45

Me parece más fácil (y más legible) para copiar sólo la línea y comente la versión original:

#Old version of ls: 
#ls -l $([ ] && -F is turned off) -a /etc 
ls -l -a /etc 
+0

Voto por la claridad. No sé por qué esta no es la primera opción. – Davdriver

1

mayoría de los comandos permiten argumentos para venir en cualquier orden. Basta con mover las banderas comentadas hasta el final de la línea:

ls -l -a /etC# -F is turned off 

Luego de volver a activarlo, simplemente elimine el comentario y quite el texto:

ls -l -a /etc -F 
2

Aquí está mi solución para comentarios en línea en el medio de tuberías múltiples comandos.

Ejemplo de código sin comentar:

#!/bin/sh 
    çat input.txt \ 
    | grep something \ 
    | sort -r 

Solución para un comentario tubería (usando una función de ayuda):

#!/bin/sh 
    pipe_comment() { 
     cat - 
    } 
    cat input.txt \ 
    | pipe_comment "filter down to lines that contain the word: something" \ 
    | grep something \ 
    | pipe_comment "reverse sort what is left" \ 
    | sort -r 

O si lo prefiere, aquí está la misma solución sin la función de ayuda, pero es un poco más desordenado:

#!/bin/sh 
    cat input.txt \ 
    | cat - `: filter down to lines that contain the word: something` \ 
    | grep something \ 
    | cat - `: reverse sort what is left` \ 
    | sort -r 
+4

Como un lado, si mueve el carácter de la tubería al final de la línea anterior, puede deshacerse de la asquerosa barra invertida: nuevas líneas. – tripleee

4

¿Qué tal si lo almacenamos en una variable?

#extraargs=-F 
ls -l $extraargs -a /etc 
1

Si sabe que una variable está vacía, podría utilizarla como comentario. Por supuesto, si no está vacío, estropeará tu comando.

 
ls -l ${1# -F is turned off} -a /etc 

§ 10.2. Parameter Substitution

50

Mi preferido es:

Commenting in BASH script

Esto tendrá algo de sobrecarga, pero técnicamente lo hace responder a su pregunta

echo abc `#put your comment here` \ 
    def `#another chance for a comment` \ 
    xyz etc 

Y para tuberías en concreto, hay una solución limpia, sin sobrecarga

echo abc |  # normal comment OK here 
    tr a-z A-Z | # another normal comment OK here 
    sort |  # the pipelines are automatically continued 
    uniq   # final comment 

How to Put Line Comment for a Multi-line Command

+1

Tenga en cuenta que tiene que usar los trazos, '$ (# comment)' no funciona. – funroll

+1

¿Por qué '$()' no funciona? – Hendrikto

+1

Algunas versiones considerarán el ')' como parte del comentario en sí. La mayoría de los desafíos de bash se deben a la retro compatibilidad con las versiones anteriores, y una estrategia común es utilizar la solución más antigua posible. – Rafareino

0

Para la desactivación de una parte de un comando como a && b, simplemente creé un script vacío x que está en camino, por lo que puedo hacer cosas como:

mvn install && runProject 

cuando necesito para construir y

x mvn install && runProject 

cuando no (usando Ctrl + A y Ctrl + E para pasar al principio y al final).

Como se señaló en los comentarios, otra manera de hacer esto es Bash incorporado : en lugar de x:

$ : Hello world, how are you? && echo "Fine." 
Fine. 
+1

Tal compilación ya existe: ':' Como en: 'cadena; de; comandos; : discapacitado; habilitado; ' – xenithorb

+0

Aún mejor :) Gracias –

Cuestiones relacionadas