Comando multilinha: comente uma linha

11

Eu gosto de usar o seguinte formato em scripts para comandos com muitos parâmetros (para facilitar a leitura):

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

Mas, às vezes, gostaria de comentar um desses parâmetros, como:

# -p 8080:8080  

Isso não funciona, pois a EOL é interpretada como retorno e o comando falha. Tentei isso também:

\ # -p 8080:8080

o que também não funcionou.

Pergunta: Existe uma maneira de comentar o parâmetro, por isso ele ainda está em sua própria linha, mas eu seria capaz de executar o script?

Chirlo
fonte

Respostas:

11

Você pode substituir uma substituição de comando vazia:

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
fonte
1
Não é muito legível (e o Vim não reconhece :como o comando vazio ou um comentário), mas funciona.
tricasse 6/02/19
Eu gosto que com esta solução ainda posso copiá-lo com o mouse, colá-lo e executá-lo. Agora só precisa de uma macro vi para poder fazer / desfazer essa alteração com facilidade, obrigado!
Chirlo 6/02/19
1
@tricasse uma alternativa :seriatrue
Jeff Schaller
13

Você não pode comentar um pedaço de linha.

Observe que, como as novas linhas são escapadas, o comando é na verdade uma única linha (para o analisador de shell) e não há como comentar parte de uma única linha (exceto no final).

Em vez disso, talvez faça apenas uma cópia do comando original em um editor e comente-o completamente, mantendo o comando modificado descomentado:

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

Como alternativa, se você deseja excluir ou alterar ocasionalmente a -popção e seu argumento (supondo bashou um shell com a mesma sintaxe 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

Em seguida, basta alterar ou comentar a tarefa para port.

Levando isso adiante:

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 da atribuição da matriz, não há problemas em comentar uma linha:

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
fonte