Terminal: وزن لا يتعامل مع الأسطر الجديدة بشكل صحيح

تم إنشاؤها على ١٦ فبراير ٢٠٢٠  ·  3تعليقات  ·  مصدر: microsoft/terminal

بيئة

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

خطوات التكاثر

قم بتشغيل هذا في PowerShell:

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

سلوك متوقع

يجب أن أحصل على علامة تبويب جديدة مقسمة مرتين (ثلاثة أجزاء)

السلوك الفعلي

  1. نافذة جديدة
    2 ، ثلاث علامات تبويب
  2. توجد أخطاء في علامتي التبويب الثانية والثالثة:
[error 0x80070002 when launching `
                                  split-pane -H -p "Windows PowerShell"']

و

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

الحل

اكتشفت أخيرًا أنه إذا أضفت مسافة بعد كل ; فإنها تعمل (باستثناء # 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

ال 3 كومينتر

تضمين التغريدة
حاولت إضافة إرجاع السطر وتغذية السطر إلى فواصل الرموز لتحليل سطر الأوامر في اختباراتي لـ # 4724. لكن عندما حاولت تشغيل مثالك ، اتضح أن العلامة الخلفية لا تفلت أبدًا من السطر الجديد ما لم يسبقها مسافة. بغض النظر عن التطبيق الذي تحاول الاتصال به. أي حرف آخر (ليس فقط الفاصلة المنقوطة) مباشرة أمام العلامة الخلفية لن يؤدي إلى الهروب من السطر الجديد في وحدة تحكم PowerShell. هل يمكنك تأكيد؟ أعتقد أنها بالأحرى مشكلة PowerShell.
إذا قمت بتشغيل المثال الخاص بك من داخل غلاف CMD (تم تجاوز السطر الجديد باستخدام ^ ) فإنه يعمل بالفعل حتى بدون وجود \ r و \ n كفواصل رمزية في التعليمات البرمجية المصدر الطرفية.

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

في الواقع ، نعم ، عندما أقوم بتشغيل المثال من الإصدار الأصلي ولكن أضع مسافات أمام backticks الهروب من السطر الجديد ، أحصل على هذا:

image

يبدو وكأنه مشكلة في كيفية هروب بوويرشيل من الأسطر الجديدة.

أنت محق تماما. أنا آسف - قصدت الخروج بمثال خالص من PowerShell لبناء الجملة (أو استخدام echoargs.exe) حتى أتمكن من معرفة ما كان يحدث على وجه اليقين ، ولم أفعل ذلك قبل تقديم المشكلة. في حالة ما إذا كان ذلك سيساعد في المناقشات مع مستخدمي PowerShell الآخرين مثلي - الذين نسوا أن PowerShell يفعل سلاسل _مبسطة_ - إليك مثال بسيط لما يفعله PowerShell بشكل خاطئ:

ملاحظة: تأخذ Write-Host أي عدد من معلمات السلاسل

image

وبالطبع ، إذا قمت بتمرير سلسلة غريبة من هذا القبيل إلى أمر "أصلي" ، فإن PowerShell يلفها بين علامتي اقتباس:

image

ما يحدث في الأساس هو هذا:

  1. نظرًا لأنه عبارة عن غلاف ، فإن PowerShell لا _require_ علامات اقتباس حول معلمات السلسلة.
    2 ، يعامل PowerShell سطرًا جديدًا مهربًا _داخل_ سلسلة بشكل مختلف عن السطر الجديد المهرب في نهاية سطر الأوامر (وهو استمرار السطر)

عندما لا نترك مسافة بين `; (الذي هربنا منه ، لذلك فهو مجرد سلسلة) والسطر الجديد ، فإن PowerShell ملزم بافتراض أنه جزء من سلسلة ، وليس سطرًا منفصلاً - علامة استمرار. يمكننا تجنب ذلك من خلال فصلها عن السلسلة _ ضمنيًا_ بمسافة (كما فعلت في "الحل البديل" أعلاه) ، أو صراحةً ، بوضع علامات الاقتباس حول السلسلة:

wt `
new-tab -p "PowerShell Core" ";"`
split-pane -H -p "Windows PowerShell" ";"`
split-pane -p cmd
هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات