Neden bazen tekrar tekrar terminalde “>” ile sorulabilir?


19

Tamam, bazı komutları yanlış şekilde çalıştırdığımda, (yanlış yazılmış, vb.) Terminal bunu çıkarır: >yerine computername:workingfolder username$, ve enter yazdığınızda şöyle gider:

>

>

>

Eğer 3 kez enter tuşuna bassaydım olurdu.

Yanıtlar:


43

> Önceden girdiğiniz değerin dengesiz teklif işaretleri olup olmadığını göreceksiniz.

Örnek olarak, komut satırına tek bir alıntı ve ardından birkaç entertuş yazın:

$ '
> 
> 
> 

Devam istemleri siz

  • (a) komutu bir kapanış teklif işaretiyle tamamlamak

    veya

  • (b) girişi bitirmek için Ctrl+ Dyazın, bu noktada kabuk, dengesiz tırnaklarla ilgili bir hata mesajıyla yanıt verir,

    veya

  • (c) girdiğiniz komutu iptal edecek Ctrl+ Cyazın.

Bu nasıl faydalı

Bazen, katıştırılmış yeni satırlar içeren bir dize girmek isteyebilirsiniz. Bunu aşağıdaki gibi yapabilirsiniz:

$ paragraph='first line
> second line
> third line
> end'

Şimdi, bu kabuk değişkenini görüntülediğimizde, bilgi istemlerinin kaybolduğunu ancak yeni satırların korunduğunu görebilirsiniz:

$ echo "$paragraph"
first line
second line
third line
end

16

Komutunuzda kapatılmamış bir teklifiniz varsa bu olur. Bu şöyle bir şey:

$ echo "test here
>
>
...

Teklifi kapatarak bu moddan çıkabilirsiniz (a "veya 'açık teklifiniz ne olursa olsun). Ayrıca küme ayracı ile ayrılmış bir blok, kısmen tamamlanmış for-doveya while-doilmek veya diğer bazı yapılar da olabilir. Ctrl-CBu komutu iptal etmek için tuşuna da basabilirsiniz (ardından Uprevize etmek için tuşuna basın ).

Bu, bazen beklemediğiniz yerde parametre veya geçmiş genişletmeleri meydana geldiğinde belirgin bir eksik alıntı olmadan gerçekleşebilir .


>Sizin ise PS2( "ikincil istemi") değer. Size ne olduğunu hatırlatmak için bunu başka bir şeyle değiştirebilirsiniz:

PS2="Unclosed >"

Gözlerinde farklı .bashrco baskı yapacak Unclosed >yerine her satırın başında.


7

Diğer yanıtlara ek \olarak, bir satırdaki son karakter olarak a yazdığınızda da devam istemini alırsınız .


5
(Benim için, ters eğik çizgi korkutucu bir şekilde Enter tuşuna yakın olduğu için genellikle kazara olur.)
Bay Lister

Değil üzerinde klavyemden , öyle değil.
TRiG

@TRiG Yani, sık sık \ yerine #? Doğru ...
Bay Lister

7

Cevap, Bash Referans El Kitabındaki bu şifreli sözde yatmaktadır :

5.1 Bourne Kabuğu Değişkenleri

[...]

  • PS1: Birincil bilgi istemi dizesi. Varsayılan değer ' \s-\v\$' şeklindedir. Daha önce genişletilen kaçış dizilerinin tam listesi için bkz. Bir İstemi YazdırmaPS1 .
  • PS2: İkincil bilgi istemi dizesi. Varsayılan değer ' >' şeklindedir.

Ardından :

6.3.3 Etkileşimli Kabuk Davranışı

  1. Bash PS1, bir komutun ilk satırını okumadan önce genişler ve görüntüler PS2ve çok satırlı bir komutun ikinci ve sonraki satırlarını okumadan önce genişler ve görüntülenir .

Böylece, >basarsanız Enterve Bash komutun tamamlanmadığını belirlerseniz bilgi istemi görünür . Bunun nedeni şunlar olabilir:

  • Yeni satırdan önceki karakter, satır devamı\ olarak kabul edilen bir a'dır .
  • Sen tamamlanmamış bir dize (eşleşmeyen tırnak veya sonlandırılmamıştır burada-doc) veya diğer bazı eşleşmeyen ayraçları, var $(), (), ``.
  • Bir işlev tanımı, fordöngü, whiledöngü veya a başlattınız case.

Yanlışlıkla yazılan bir hata nedeniyle ikincil bilgi istemini görüyorsanız ControlC, birincil bilgi istemine dönmek için tuşuna basın.


Burada bir doc'ye yazarken ikincil bilgi istemini de alırsınız. Ancak bunun kazara olması diğerlerine göre daha az olasıdır.
Barmar

6

Kabuk komutu tamamlamanızı bekliyor. Belki bir yerde açıklanmamış bir teklif var ya da bir "for" döngüsü başlattığınızı düşünüyor ve kullanıcının yazmayı bitirmesini bekliyor

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.