Perintah multiline: komentar satu baris

11

Saya suka menggunakan format berikut dalam skrip untuk perintah dengan banyak parameter (agar mudah dibaca):

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

Tapi, kadang-kadang saya ingin mengomentari salah satu parameter ini seperti:

# -p 8080:8080  

Ini tidak berfungsi, karena EOL ditafsirkan sebagai kembali dan perintah gagal. Mencoba ini juga:

\ # -p 8080:8080

yang juga tidak berhasil.

Pertanyaan: Apakah ada cara untuk mengomentari parameter, jadi masih pada barisnya sendiri, tapi saya bisa menjalankan skrip?

Chirlo
sumber

Jawaban:

11

Anda bisa mengganti substitusi perintah kosong:

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
sumber
1
Tidak terlalu mudah dibaca (dan Vim tidak mengenali :sebagai perintah kosong atau komentar) tetapi berfungsi.
tricasse
Saya suka itu dengan solusi ini saya masih bisa menyalinnya dengan mouse, tempel dan jalankan. Sekarang hanya perlu makro makro untuk dapat melakukan / membatalkan perubahan ini dengan mudah, terima kasih!
Chirlo
1
@ trricasse alternatif untuk :menjaditrue
Jeff Schaller
13

Anda tidak dapat berkomentar sepotong kalimat.

Perhatikan bahwa karena baris baru lolos, perintah sebenarnya adalah satu baris (ke pengurai shell), dan tidak ada cara untuk mengomentari bagian dari baris tunggal (kecuali untuk di bagian paling akhir).

Sebagai gantinya, mungkin hanya membuat salinan dari perintah asli dalam editor dan berkomentar sepenuhnya sambil menjaga perintah yang dimodifikasi tidak dikomentari:

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

Atau, jika Anda ingin sesekali menghapus atau mengubah -popsi dan argumennya (dengan asumsi bashatau shell dengan sintaks array yang sama):

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

Kemudian cukup ubah atau komentari tugas ke port.

Mengambil ini lebih lanjut:

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

Di dalam penugasan array, tidak ada masalah dengan mengomentari baris:

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
sumber