Comando multilínea: comente una línea

11

Me gusta usar el siguiente formato en scripts para comandos con muchos parámetros (para facilitar la lectura):

docker run \
 --rm \
 -u root \
 -p 8080:8080 \
 -v jenkins-data:/var/jenkins_home \
 -v /var/run/docker.sock:/var/run/docker.sock \
 -v "$HOME":/home \
 jenkinsci/blueocean

Pero, a veces me gustaría comentar uno de estos parámetros como:

# -p 8080:8080  

Esto no funciona, ya que la EOL se interpreta como retorno y el comando falla. Intenté esto también:

\ # -p 8080:8080

que tampoco funcionó.

Pregunta: ¿Hay alguna forma de comentar el parámetro, por lo que todavía está en su propia línea, pero podría ejecutar el script?

Chirlo
fuente

Respuestas:

11

Podría sustituir una sustitución de comando vacía:

docker run \
 --rm \
 -u root \
 $(: -p 8080:8080 ) \
 -v jenkins-data:/var/jenkins_home \
 -v /var/run/docker.sock:/var/run/docker.sock \
 -v "$HOME":/home \
 jenkinsci/blueocean
Jeff Schaller
fuente
1
No es muy legible (y Vim no reconoce :como el comando vacío o un comentario) pero funciona.
tricasse
Me gusta que con esta solución todavía puedo copiarlo con el mouse, pegarlo y ejecutarlo. Ahora solo necesito una macro vi para poder hacer / deshacer este cambio fácilmente, ¡gracias!
Chirlo
1
una alternativa a @tricasse :seríatrue
Jeff Schaller
13

No puedes comentar un trozo de línea.

Tenga en cuenta que, dado que las líneas nuevas se escapan, el comando es en realidad una sola línea (para el analizador de shell), y no hay forma de comentar una parte de una sola línea (excepto al final).

En cambio, tal vez solo haga una copia del comando original en un editor y coméntelo completamente mientras mantiene el comando modificado sin comentar:

docker run \
 --rm \
 -u root \
 -v jenkins-data:/var/jenkins_home \
 -v /var/run/docker.sock:/var/run/docker.sock \
 -v "$HOME":/home \
 jenkinsci/blueocean

# Was originally:
# docker run \
# --rm \
# -u root \
# -p 8080:8080 \
# -v jenkins-data:/var/jenkins_home \
# -v /var/run/docker.sock:/var/run/docker.sock \
# -v "$HOME":/home \
# jenkinsci/blueocean

Alternativamente, si desea eliminar o cambiar ocasionalmente la -popción y su argumento (suponiendo basho un shell con la misma sintaxis de matriz):

port=( -p 8080:8080 )

docker run \
 --rm \
 -u root \
 "${port[@]}" \
 -v jenkins-data:/var/jenkins_home \
 -v /var/run/docker.sock:/var/run/docker.sock \
 -v "$HOME":/home \
 jenkinsci/blueocean

Luego simplemente cambie o comente la tarea a port.

Llevando esto más allá:

docker_run_args=(
    --rm 
    -u root 
    -p 8080:8080 
    -v jenkins-data:/var/jenkins_home 
    -v /var/run/docker.sock:/var/run/docker.sock 
    -v "$HOME":/home 
    jenkinsci/blueocean
)

docker run "${docker_run_args[@]}"

Dentro de la asignación de matriz, no hay problemas al comentar una línea:

docker_run_args=(
    --rm 
    -u root 
#    -p 8080:8080 
    -v jenkins-data:/var/jenkins_home 
    -v /var/run/docker.sock:/var/run/docker.sock 
    -v "$HOME":/home 
    jenkinsci/blueocean
)

docker run "${docker_run_args[@]}"
Kusalananda
fuente