Terminal: wt tidak menangani baris baru dengan benar

Dibuat pada 16 Feb 2020  ·  3Komentar  ·  Sumber: microsoft/terminal

Lingkungan Hidup

Windows build number: Microsoft Windows [Version 10.0.18363.657]
Windows Terminal Version: 0.9.433.0

Langkah-langkah untuk mereproduksi

Jalankan ini di PowerShell:

wt `
new-tab -p PowerShell` Core`;`
split-pane -H -p Windows` PowerShell `;`
split-pane -p cmd

Perilaku yang diharapkan

Saya harus membagi tab baru dua kali (tiga panel)

Perilaku sebenarnya

  1. Jendela baru
    2, Tiga tab
  2. Tab kedua dan ketiga memiliki kesalahan di dalamnya:
[error 0x80070002 when launching `
                                  split-pane -H -p "Windows PowerShell"']

dan

[error 0x80070002 when launching `
                                  split-pane -H -p "Windows PowerShell"']

SOLUSI

Saya akhirnya menemukan bahwa jika saya menambahkan spasi setelah setiap ; maka itu berfungsi (kecuali untuk # 4618):

wt `
new-tab -p PowerShell` Core`; `
split-pane -H -p Windows` PowerShell `; `
split-pane -p cmd
Area-Commandline Help Wanted Issue-Bug Product-Terminal Resolution-External

Semua 3 komentar

@Tokopedia
Saya mencoba menambahkan carriage return dan umpan baris ke pemisah token untuk penguraian baris perintah dalam pengujian saya untuk # 4724. Tetapi ketika saya mencoba menjalankan contoh Anda ternyata centang belakang tidak pernah luput dari baris baru kecuali diawali dengan spasi. Terlepas dari aplikasi yang Anda coba panggil. Karakter lain (tidak hanya titik koma) tepat di depan centang belakang tidak akan memicu keluarnya baris baru di konsol PowerShell. Bisakah kamu mengkonfirmasi? Saya kira ini lebih merupakan masalah PowerShell.
Jika Anda menjalankan contoh Anda dari dalam shell CMD (baris baru lolos menggunakan ^ ) itu sudah berfungsi bahkan tanpa \ r dan \ n sebagai pemisah token di kode sumber terminal.

wt ^
new-tab -p "PowerShell Core";^
split-pane -H -p Windows` PowerShell ;^
split-pane -p cmd

Sebenarnya, ya, ketika saya menjalankan contoh dari edisi asli tetapi meletakkan spasi di depan backticks yang keluar dari baris baru, saya mendapatkan ini:

image

Sepertinya masalah bagaimana PowerShell menangani baris baru yang lolos.

Anda benar sekali. Saya minta maaf - Saya bermaksud untuk membuat contoh murni-PowerShell dari sintaks itu (atau menggunakan echoargs.exe) sehingga saya dapat mengetahui dengan pasti apa yang sedang terjadi, dan saya tidak melakukannya sebelum mengajukan masalah. Jika itu akan membantu dengan diskusi dengan pengguna PowerShell lain seperti saya - yang lupa bahwa PowerShell melakukan string _implied_ - berikut adalah contoh sederhana dari kesalahan yang dilakukan PowerShell:

Catatan: Write-Host menggunakan sejumlah parameter string

image

Dan tentu saja, jika Anda meneruskan string aneh seperti itu ke perintah "native", PowerShell akan membungkusnya dengan tanda kutip:

image

Pada dasarnya, yang terjadi adalah ini:

  1. Karena ini shell, PowerShell tidak _require_ tanda kutip di sekitar parameter string.
    2, PowerShell memperlakukan baris baru yang lolos _inside_ string secara berbeda dari baris baru yang lolos di akhir baris perintah (yang merupakan kelanjutan baris)

Ketika kita tidak meninggalkan spasi antara `; (yang telah kita escape, jadi itu hanya string) dan baris baru, PowerShell wajib menganggapnya sebagai bagian dari string, dan bukan baris terpisah tanda -kontinuitas. Kita dapat menghindari ini dengan memisahkannya dari string _implicitly_ dengan spasi (seperti yang saya lakukan di "solusi" saya di atas), atau secara eksplisit, dengan meletakkan tanda kutip di sekitar string:

wt `
new-tab -p "PowerShell Core" ";"`
split-pane -H -p "Windows PowerShell" ";"`
split-pane -p cmd
Apakah halaman ini membantu?
0 / 5 - 0 peringkat