Mehrzeiliger Befehl: Eine Zeile auskommentieren

11

Ich verwende gerne das folgende Format in Skripten für Befehle mit vielen Parametern (zur besseren Lesbarkeit):

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

Aber manchmal möchte ich einen dieser Parameter wie folgt kommentieren:

# -p 8080:8080  

Dies funktioniert nicht, da die EOL als Rückgabe interpretiert wird und der Befehl fehlschlägt. Versuchte dies auch:

\ # -p 8080:8080

was auch nicht funktioniert hat.

Frage: Gibt es eine Möglichkeit, den Parameter zu kommentieren, sodass er immer noch in einer eigenen Zeile steht, aber ich könnte das Skript ausführen?

Chirlo
quelle

Antworten:

11

Sie können eine leere Befehlsersetzung ersetzen:

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
quelle
1
Nicht sehr lesbar (und Vim erkennt nicht :als leeren Befehl oder Kommentar), funktioniert aber.
Trikasse
Ich mag es, dass ich mit dieser Lösung immer noch mit der Maus kopieren, einfügen und ausführen kann. Jetzt brauchen Sie nur noch ein vi-Makro, um diese Änderung einfach durchführen / rückgängig machen zu können, danke!
Chirlo
1
@ Tricasse eine Alternative zu :wäretrue
Jeff Schaller
13

Sie können einen Teil einer Zeile nicht auskommentieren.

Beachten Sie, dass der Befehl, da die Zeilenumbrüche maskiert sind, tatsächlich eine einzelne Zeile (für den Shell-Parser) ist und es keine Möglichkeit gibt, einen Teil einer einzelnen Zeile auskommentieren (außer ganz am Ende).

Erstellen Sie stattdessen einfach eine Kopie des ursprünglichen Befehls in einem Editor und kommentieren Sie ihn vollständig aus, während Sie den geänderten Befehl nicht kommentieren:

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

Alternativ, wenn Sie die -pOption und ihr Argument gelegentlich löschen oder ändern möchten (vorausgesetzt bashoder eine Shell mit derselben Array-Syntax):

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

Dann ändern oder kommentieren Sie einfach die Zuordnung zu port.

Weiter gehen:

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

Innerhalb der Array-Zuweisung gibt es keine Probleme beim Auskommentieren einer Zeile:

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
quelle