Commande multiligne: commentez une ligne

11

J'aime utiliser le format suivant dans les scripts pour les commandes avec beaucoup de paramètres (pour la lisibilité):

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

Mais, parfois, je voudrais commenter l'un de ces paramètres comme:

# -p 8080:8080  

Cela ne fonctionne pas, car l'EOL est interprété comme retour et la commande échoue. J'ai également essayé:

\ # -p 8080:8080

qui n'a pas fonctionné non plus.

Question: Existe-t-il un moyen de commenter le paramètre, il est donc toujours sur sa propre ligne, mais je serais en mesure d'exécuter le script?

Chirlo
la source

Réponses:

11

Vous pouvez remplacer une substitution de commande vide:

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
la source
1
Pas très lisible (et Vim ne reconnaît pas :la commande vide ou un commentaire) mais fonctionne.
tricasse
J'aime ça avec cette solution je peux toujours le copier avec la souris, le coller et l'exécuter. Maintenant, juste besoin d'une macro vi pour pouvoir faire / annuler ce changement facilement, merci!
Chirlo
1
@tricasse une alternative à :seraittrue
Jeff Schaller
13

Vous ne pouvez pas commenter un morceau de ligne.

Notez que puisque les sauts de ligne sont échappés, la commande est en fait une seule ligne (à l'analyseur shell), et il n'y a aucun moyen de commenter une partie d'une seule ligne (sauf à la toute fin).

Au lieu de cela, peut-être juste faire une copie de la commande d'origine dans un éditeur et la commenter complètement tout en gardant la commande modifiée sans commentaire:

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

Alternativement, si vous souhaitez supprimer ou modifier occasionnellement l' -poption et son argument (en supposant bashou un shell avec la même syntaxe de tableau):

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

Ensuite, modifiez ou commentez l'affectation port.

Pour aller plus loin:

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[@]}"

À l'intérieur de l'affectation de tableau, il n'y a aucun problème à commenter une ligne:

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
la source