Terminal gösterileri> girdikten sonra \


Yanıtlar:


35

Komut satırını her kullandığınızda, çok uzun bir komut çalıştırmanız gerektiğinde bir örnek olabilir. Bu nedenle, daha iyi okunabilirlik ve anlama için komutu birçok satıra bölmek istiyorsunuz. Ancak, yazılan yeni bir satır karakteri kullanırsanız Enter, kabuk bunun yeni bir komut olduğunu düşünecektir. Demek \yeni satır karakterini takip ediyorsun .

Temel olarak, komutlar veya bash scriptleri "yorumlanır", yani satır satır yürütülür. Her yeni satır, yeni bir komutun başlangıcı anlamına gelir. Terminalde, tuşuna bastığınızda Enter, yeni bir komut çalıştırmanız istenir. Bu yüzden yeni bir hattın "kaçması" gerekiyor. \Bunu takiben yazmak Enter, geçerli komutu birden çok satıra bölmenizi sağlar; böylece kabuk, yeni bir komut olduğunu değil, önceki komutun devamı olduğunu düşünür.

> girilen komutun bir sonraki satırı için istemden başka bir şey değildir.

Örneğin:
Birden fazla paket kurmak istiyorsak, komut aşağıdaki gibi olacaktır.

$ sudo apt install [package1] [package2] [package3] ...

Ama bazen, bu komut darmadağın yapar. Böylece onu \takip edebiliriz Enter(newline karakter)

$ sudo apt install [package1]\
> [package2]\
> [package3]\
> ...

4
@Curiouskangaroo BTW, değerleri ve değişkenleri ayarlayarak yeni komut ve satır devam işleminin nasıl yapılmasını istediğini kontrol edebilirsiniz . Biçimi öğrenmek için bash man sayfasına bakın ve geçerli ayarı görüntülemek için kullanın . $PS1$PS2echo "'$PS2'"
jpaugh

14

Ters eğik çizgi karakteri ( \), kabukta bir çıkış karakteri olarak kullanılır . Satırdaki son karakter olarak kullanırsanız, yeni satırdan kaçar, böylece komutunuzu bitirmek yerine bir sonraki satırda devam edebilirsiniz. Bu, >Bash'deki bilgi istemi ile belirtilir .

Örnek:

$ echo A\
> B
AB
$

\Komutunuza değişmez koymak için , başka bir ters eğik çizgi kullanarak kaçmanız gerekir:

$ echo \\
\
$

7

[diğer 2 ">" nin nasıl göründüğünden bahsetmediği için (çok uzun / karmaşık) bir cevap ekleyerek ... yani PS2'den bahsetmeyin]

Yazdığınız: \Enter: \Sadece için kabuğuna diyor çıkışEnter yerine bir literral karakter olarak her zamanki gibi yorumlayarak (Bu nedenle kabuk "sonraki satıra gider" yerine geçerli komut satırı sonlandırmak ve onu yorumlama bazı olmadığı sürece. heredoc, a for loop, etc) gibi diğer yapılar.

Bu nedenle terminaliniz şu şekilde yorum \Enteryapar: "bir sonraki satıra git" (komutu yorumlamaya başlamadan) ve böylece terminal şimdi çok satırlı komutun 2. satırına girmenize izin verir ve $PS2içeriği daha görünür hale getirmek için içeriği gösterir ( PS2 istemi olarak adlandırılır ).

PS2 değişken varsayılan olarak genellikle olarak tanımlanır: PS2="> "exemple için yapabildiğin ve düzenlemek sizin ~ / .bashrc sen (dikkate alarak istediğiniz gibi yeniden tanımlamak için o imo, önlemek gibi tehlikeli karakterler içeren gerektiğini >ya ;ve size yardımcı olmalıdır ya açıkça bir satırlı komutlar olduğunu görüyoruz ama bu satırlı içeriği devre dışı bırakma (örn: PS2="#cont#") olabildiğince kendi hatları üzerinde çok az etkisi olarak onları ya da kolayca kopyalayıp izin / yapıştır özellikleri (ör: PS2=" ")

Bu arada, bazı durumlarda bazı önemli ikili komutları silmeye çok iyi yol açabileceğinden, bu kötü bir varsayılandır.

PS2'yi başka bir şey olarak yeniden tanımlayabilirsiniz (örneğin: PS2 = "", çok satırlı komutlar, aşağıdakilerden korkmadan kolayca kopyalanabilir / yapıştırılabilir:)

Örneğin, oldukça uzun olmaya başlayan bir komutunuz olduğunu varsayalım (ve terminaliniz yeterince geniş değilse ekranınıza katlanabilir):

grep -i "something"  /some/file  /another/file /3rd/file /etc/someimportantfile 

Komut çok uzun görünüyorsa (ve etrafına sarılırsa), bir sonraki satıra ne zaman (ne zaman) yazacağınızı seçerek görsel olarak 2 satıra bölmek isteyebilirsiniz: \Enteruygun noktada:

grep -i "something"  /some/file  /another/file /3rd/file \
> /etc/someimportantfile #warning, "> " was inserted by the shell and this changes everything !

Varsayılan PS2'yi kullanarak, kabuk ">" dan önce "/ etc / someimportantfile" .. ekledim. Böylece, bu 2 satırı başka bir terminalde kopyalayıp yapıştırırsanız, eylemleri tamamen farklı olacaktır: 4 dosyaya geçmek yerine, grep sadece ilk 3 dosyaya giriyor ve grep çıktısı 4. dosyanın içeriğini değiştiriyor (/ etc / someimportantfile)!

Bu sorunlardan kaçınmak (ve diğerleri için): örnek tanım için şunları yapabilirsiniz: PS2=" "çok satırlı komutları daha temiz ve kopyalamak / yapıştırmak için:

grep -i "something"  /some/file  /another/file /3rd/file \
  /etc/someimportantfile #now only 2 spaces were inserted, without changing the grep's actions!

Bu zaman / bin / some komutunun basitçe 2 boşluk sağa kaydırdığını ve ">" eklenmediğini, böylece bu 2 satırlı komutu güvenle kopyalayıp yapıştırabileceğinizi unutmayın.

PS2 ayrıca "for" "da kullanılırken" vb. Döngüler ve "" olarak tanımlanması benim için de daha iyidir.

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.