私は引数の多いコマンドのスクリプトで(読みやすくするために)次の形式を使用するのが好きです。
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
これも機能しません。
Q:パラメータはまだ独自の行にありますが、スクリプトを実行できるようにパラメータをコメントアウトする方法はありますか?
答え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[@]}"
配列割り当て内で1行をコメントアウトするのに問題はありません。
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[@]}"
答え2
空のコマンド置換を使用できます。
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