Kabuk Komut Dosyasındaki Yorumları Engelleme


250

Bir kabuk betiğindeki kod bloğunu yorumlamanın basit bir yolu var mı?


2
Bu kadar kolay ve basit bir sorunun ne kadar farklı ve karmaşık cevaplara sahip olduğu ilginç.
Sigur

Yanıtlar:


348

Bash'da:

#!/bin/bash
echo before comment
: <<'END'
bla bla
blurfl
END
echo after comment

'Ve 'etrafında ENDsınırlayıcı, örneğin gibi blok içindeki aksi şeyler önemlidir $(command)ayrıştırılır ve çalıştırılacaktır.

Bir açıklama için şu ve bu soruya bakın.


24
Şirin hile - 'END' anahtar kelimesi (tabii ki kullanıcı tarafından seçilen) yorumlanacak malzemenin içinde kendi başına bir satırda görünmediği sürece.
Jonathan Leffler

9
@kalengi: Evet; alıntılarda kullanılan kelime uygun herhangi bir şey olabilir; EOFklasik bir örneğidir (ve bu yüzden olduğunu !kendi başına bir ünlem işareti,), ancak kullanabilirsiniz SNURFLE_BURGERSya classical_end_markeryorumladı aşımı malzemedeki kendi başına bir satırda görünmüyor başka bir kelime veya. Uzaylar vb. İle denemeler yapmayı öğrenirdim, ama kelime de onlarla iyi çalışabilir.
Jonathan Leffler

4
Kesinlikle işe yarıyor ama kimse bunun nasıl çalıştığını açıklayabilir mi? Teşekkürler
mbbce

5
@MB_CE, bkz. Stackoverflow.com/questions/32126653/… . Bununla :birlikte, girdisini okumayan ve her zaman başarılı bir değerle çıkan bir komut ( ) çalıştırıyor ve "yorumu" girdi olarak gönderiyor. Çok fazla değil.
Charles Duffy

2
Pasif kod oluşturmak için aktif kod yazmanın inanılmaz derecede çirkin ve kafa karıştırıcı olduğunu düşünüyorum ... sadece eski blok seçim modunu kullanın ve # tuşuna basın; bununla ilgili büyük sorun nedir?
Rusty75

90

Kabuk betiği üzerinde blok yorumu yoktur.

Kullanılması vi(evet, vi) kolayca hat gelen yorum yapabilirsiniz n için m

<ESC>
:10,100s/^/#/

(satır 10'dan 100'e kadar satır başındaki (^) işareti # işareti ile okunur.)

ve yorum yapmak

<ESC>
:10,100s/^#//

(satır 10'dan 100'e kadar yedek satır başlangıcı (^) ve # ile noting // yazan.)

vineredeyse evrenseldir /bin/sh.


# Çizgilerin önüne yerleştirmek için vi üzerinde düzenli ifade ile güzel hile.
Atiq Rahman

5
Sadece bir ipucu - vim kullanıyorsanız ve bu her satırın başlangıcını vurgularsa |noh, sonuna ekleyin . Boru ek komutları ayırır ve nohışıksızlık içindir. Arama terimi vurgulaması, bir dahaki sefere arama yaptığınızda otomatik olarak devam eder. Örnek::10,100s/^/#/g|noh
Matthew

Bu bir komut dosyasından otomatik olması gerekir. Bunu insan etkileşimi olmadan vi ile bir dosyaya yapmanın bir yolu var mı?
Timothy Swan

1
@TimothySwan Gawk veya sed programının bunu yapabileceğini hayal ediyorum ... her nasılsa.
BeowulfNode42

vi ile bir bloğu yorumlamak (veya öneklemek) için tercih ettiğim yol, yorum yapmaya başlamak istediğiniz satırın başlangıcına gidin (örneğin <SHIFT>+G 10 <ENTER>o zaman 0veya gezinmek için başka bir yolla). Ardından <CTRL>+V, görsel blok moduna girmek ve yorum yapmak istediğiniz tüm satırların başlangıcını vurgulamak için düğmelerini kullanın (bu örnekte 90 J). Sonra SHIFT+Ivurgulanan bloktan önce eklemek için tuşuna basın . Yorum işaretini girin (örn. #) Ve <ESC>önekinizi tamamlamak için tuşuna basın . Bu açıklama çok uzun geliyor, ancak benim deneyimime göre pratikte çok daha hızlı.
Ueffes

52

Kullanabilirsiniz:

if [ 1 -eq 0 ]; then
  echo "The code that you want commented out goes here."
  echo "This echo statement will not be called."
fi

14
Bu klasik, ancak stackoverflow.com/a/19409316/832230 notları gibi, sadece if [ ];çalışıyor.
Acumenus


3
Bu sadece iş gibi görünüyor yorumlanan metin aslında kod. Borular ve noktalı virgüllerle ilgili yorumlarda sorun yaşıyorum. Sunny256 cevap çalıştı.
swdev

daha da özlü olacaktır []; testi kullanarak
Justin Duncan

27

Aşağıdaki için çalışmalı sh, bash, kshve zsh.

Yorum yapılacak kod blokları içeri konabilir BEGINCOMMENTve ENDCOMMENT:

[ -z $BASH ] || shopt -s expand_aliases
alias BEGINCOMMENT="if [ ]; then"
alias ENDCOMMENT="fi"

BEGINCOMMENT
  echo "This line appears in a commented block"
  echo "And this one too!"
ENDCOMMENT

echo "This is outside the commented block"

Yukarıdaki kodun çalıştırılması şunlarla sonuçlanır:

This is outside the commented block

İçin yorumsuz kod blokları böylece söz yorumladı

alias BEGINCOMMENT="if : ; then"

onun yerine

alias BEGINCOMMENT="if [ ]; then"

yukarıdaki örnekte.


23

tek tırnak işaretlerinden kaçabiliyorsanız:

__='
blah blah comment.
'

Bunu severim. Ancak çift alt çizgi ne anlama geliyor? En iyi söyleyebildiğim kadarıyla özel olarak ele alınması gerektiği kuralını kullanarak sadece değişken bir isim?
chessofnerd

Ayrıca çoğu editörde sözdizimi vurgulama sağlar ve netlik için belgeler veya dokümanlar gibi değişken bir ad öneririm olsa da $ __ ile gerekirse çağrılabilir.
jasonleonhard


Bu en iyi cevap olmalı. Sadece çift alt
B Abali

Bunu denedim ama başarısız oldu çünkü -F ';' blok içinde yorum yapmak.
yO_


14

Vim'de:

  1. yorum yapmak istediğiniz bloğun ilk satırına gidin
  2. shift-V (görsel moda girin), blokta yukarı doğru vurgu çizgileri
  3. seçimde aşağıdakileri yürüt :s/^/#/
  4. komut şöyle görünecektir:

      :'<,'>s/^/#
  5. Enter tuşuna basın

Örneğin

shift-V
jjj
:s/^/#
<enter>

7
:s/^#/
Rahatsız

@ Horta'nın cevabını kontrol edin: stackoverflow.com/a/28376319/3506015 - daha az tuşa basıldığında!
geedoubleya

4

Vi / Vim'in aşağıdaki gibi şeyler için tasarlanmış Görsel Blok modunu kullanabilirsiniz:

Ctrl-V  
Highlight first element in rows you want commented  
Shift-i  
#  
esc  

Rahatsızlık şöyle olur:

Ctrl-V  
Highlight #'s  
d  
l  

Bu, satır sayılarını saymak veya okumak yerine bu tür bir şey yapmanın etkileşimli yoludur.

Son olarak, Gvim'de ctrl-v yerine Visual Block moduna girmek için ctrl-q kullanıyorsunuz (çünkü yapıştırmanın kısayolu budur).


Bu basit yöntemi seviyorum. : o)
geedoubleya

4

Dürüst olmak gerekirse, neden bu kadar fazla mühendislik yapılıyor ...

Pasif kod oluşturmak için aktif kod yazmanın gerçekten kötü bir uygulama olduğunu düşünüyorum.

Benim çözümüm: çoğu editör blok seçme moduna sahiptir. Yorum yapmak istediğiniz tüm satırlara # eklemek için kullanın. Sorun ne...

Not defteri örneği:

Oluşturmak için: Alt - aşağı kaydırın, # tuşuna basın.

Silmek için: Alt tuşunu basılı tutup aşağı kaydırın, sağa kaydırın, silin.


8
Kullanıcı büyük olasılıkla terminalde. Fare ortamı kabul edilemez.
Gary

Hala varlar mı? Genellikle grafik modda düzenlerim ve vi kullanarak geri yapıştırırım, bu kolay bir çözüm olabilir.
Rusty75

2

Sunny256 tarafından kabul edilen cevapta buradaki doküman numarasındaki bir değişiklik, yorumlar için Perl anahtar kelimelerini kullanmaktır. Yorumlarınız aslında bir tür dokümantasyonsa, yorumlanmış blok içindeki Perl sözdizimini kullanmaya başlayabilirsiniz, bu da güzel biçimlendirilmiş olarak yazdırmanıza, bir man sayfasına dönüştürmenize vb.

Bildiğim kadarıyla kabuk söz konusu olduğunda, sadece değiştirmeniz gerekiyor 'END'ile '=cut'.

echo "before comment"
: <<'=cut'
=pod

=head1 NAME
   podtest.sh - Example shell script with embedded POD documentation

etc.

=cut
echo "after comment"

(" Belgeleri kabuk betiğine gömme " konusunda bulundu )


0

Başka bir mod: Düzenleyicinizde BLOK yorum seçeneği yoksa,

  1. Düzenleyicinin ikinci bir örneğini açın (örneğin Dosya => Yeni Dosya ...)
  2. Üzerinde çalıştığınız ÖNCEKİ dosyadan YALNIZCA YORUM YAPMAK İSTEDİĞİNİZ BÖLÜMÜ seçin
  3. Yeni geçici dosyanın penceresine kopyalayıp yapıştırın ...
  4. Düzenle menüsünü açın, DEĞİŞTİR'i seçin ve değiştirilecek dize olarak girin '\ n'
  5. yerine string olarak girdi: '\ n #'
  6. 'HEPSİNİ değiştir' düğmesine basın

YAPILAN

HERHANGİ BİR editör ile çalışır


0

Ben açık ve kapalı tek bir satır gibi:

if [ ]; then ##
    ...
    ...
fi; ##

'##' blok yorumunun başlangıcını ve sonunu kolayca bulmama yardımcı oluyor. Eğer bir demet varsa '##' dan sonra bir sayı yapıştırabilirim. Yorumu kapatmak için sadece '[]' içine '1' yapıştırıyorum. Ben de yorum bloğunda tek tırnak ile yaşadım bazı sorunları önlemek.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.