Mengapa saya terkadang berulang kali diminta dengan ">" di terminal?

19

Baiklah, ketika saya menjalankan perintah tertentu dengan cara yang salah, (salah eja, dll.) Terminal menampilkan ini: >bukannya computername:workingfolder username$, dan ketika saya mengetik masukkan itu seperti ini:

>

>

>

Itu akan terjadi jika saya menekan enter 3 kali.

Nama tampilan
sumber

Jawaban:

43

> adalah prompt kelanjutan default. Itulah yang akan Anda lihat jika apa yang Anda masukkan sebelumnya memiliki tanda kutip yang tidak seimbang.

Sebagai contoh, ketik satu kutipan pada baris perintah diikuti oleh beberapa enterkunci:

$ '
> 
> 
> 

Permintaan kelanjutan akan muncul hingga Anda juga

  • (a) isi perintah dengan tanda kutip penutup

    atau

  • (B) ketik Ctrl+ Duntuk menyelesaikan input, di mana shell akan merespon dengan pesan kesalahan tentang tanda kutip tidak seimbang,

    atau

  • (c) ketik Ctrl+ Cyang akan membatalkan perintah yang Anda masukkan.

Cara ini bermanfaat

Terkadang, Anda mungkin ingin memasukkan string yang berisi baris baru yang disematkan. Anda dapat melakukannya sebagai berikut:

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

Sekarang, ketika kami menampilkan variabel shell itu, Anda dapat melihat bahwa prompt telah menghilang tetapi baris baru tetap dipertahankan:

$ echo "$paragraph"
first line
second line
third line
end
John1024
sumber
16

Itu akan terjadi jika Anda memiliki kutipan tidak tertutup dalam perintah Anda. Itu seperti:

$ echo "test here
>
>
...

Anda dapat keluar dari mode itu dengan menutup kutipan (tulis "atau ', atau apa pun kutipan terbuka Anda). Ini juga bisa berupa blok yang dibatasi oleh brace, sebagian-lengkap for-doatau while-doloop, atau konstruksi tertentu lainnya. Anda juga dapat menekan Ctrl-Cuntuk membatalkan perintah ini (lalu tekan Upuntuk merevisinya).

Ini kadang-kadang bisa terjadi tanpa kutipan yang jelas hilang ketika ekspansi parameter atau riwayat terjadi di mana Anda tidak mengharapkannya.


Nilai >adalah PS2("permintaan sekunder") Anda. Anda dapat mengubahnya menjadi sesuatu yang lain untuk mengingatkan Anda tentang apa yang terjadi:

PS2="Unclosed >"

Anda .bashrcakan membuatnya mencetak Unclosed >pada awal setiap baris sebagai gantinya.

Michael Homer
sumber
7

Selain jawaban lain, Anda juga mendapatkan prompt kelanjutan saat Anda mengetikkan \sebagai karakter terakhir pada sebuah baris.

Tuan Lister
sumber
5
(Bagi saya, ini biasanya terjadi secara tidak sengaja, karena backslash sangat dekat dengan tombol Enter.)
Mr Lister
Tidak di keyboard saya , tidak.
TRiG
@TRiG Maksud Anda, Anda sering mengetik # secara tidak sengaja, bukan \? Benar ...
Tn. Lister
7

Jawabannya terletak pada penyebutan samar ini di Bash Reference Manual :

5.1 Variabel Bourne Shell

[...]

  • PS1: String prompt utama. Nilai default adalah ' \s-\v\$'. Lihat Mencetak Prompt , untuk daftar lengkap urutan pelarian yang diperluas sebelum PS1ditampilkan.
  • PS2: String prompt sekunder. Nilai default adalah ' >'.

Diikuti oleh :

6.3.3 Perilaku Shell Interaktif

  1. Bash memperluas dan menampilkan PS1sebelum membaca baris pertama dari sebuah perintah, dan memperluas dan menampilkan PS2sebelum membaca baris kedua dan selanjutnya dari perintah multi-baris.

Jadi, >prompt muncul jika Anda menekan Enterdan Bash menentukan bahwa perintah tidak lengkap. Itu bisa karena:

  • Karakter sebelum baris baru adalah a \, yang diperlakukan sebagai kelanjutan garis .
  • Anda memiliki string yang tidak lengkap (tidak cocok kutipan atau tidak terselesaikan di sini-doc) atau pembatas serasi lainnya, seperti $(), (), ``.
  • Anda telah memulai definisi fungsi, forloop, whileloop, atau a case.

Jika Anda melihat prompt sekunder karena kesalahan pengetikan yang tidak disengaja, tekan ControlCuntuk kembali ke prompt utama.

200_sukses
sumber
Anda juga mendapatkan prompt sekunder saat mengetik di sini-doc. Tapi ini lebih kecil kemungkinannya terjadi secara kebetulan daripada yang lain.
Barmar
6

Shell menunggu Anda untuk menyelesaikan perintah. Mungkin ada kutipan tertutup di suatu tempat atau ia berpikir Anda memulai perulangan "untuk" dan menunggu pengguna selesai mengetik.

SidJ
sumber