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?

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

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[@]}"
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.