web-dev-qa-db-ja.com

複数行コマンド:1行をコメント化

多数のパラメーターを持つコマンド(読みやすくするため)のスクリプトでは、次の形式を使用します。

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

しかし、これらのパラメーターの1つを次のようにコメントアウトしたい場合があります。

# -p 8080:8080  

EOLはリターンとして解釈され、コマンドが失敗するため、これは機能しません。これも試しました:

\ # -p 8080:8080

これも機能しませんでした。

質問:パラメーターをコメントアウトする方法はあるので、パラメーターはまだ1行になっていますが、スクリプトを実行できますか?

11
Chirlo

空のコマンド置換を使用できます。

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
11
Jeff Schaller

行の一部をコメント化することはできません。

改行がエスケープされているため、コマンドは実際には(シェルパーサーへの)1行であり、1行の一部をコメント化する方法はありません(最後を除いて)。

代わりに、おそらくエディターで元のコマンドのコピーを作成し、変更されたコマンドのコメントを外したまま、完全にコメント化します。

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

または、-pオプションとその引数を時々削除または変更する場合(bashまたは同じ配列構文のシェルを想定):

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

次に、portへの割り当てを変更またはコメント化します。

これをさらに進める:

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

配列の割り当て内では、行をコメント化しても問題はありません。

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