Terminal: wtは改行を適切に処理しません

作成日 2020年02月16日  ·  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

予想される行動

新しいタブを2回分割する必要があります(3つのペイン)

実際の動作

  1. 新しいウィンドウ
    2、3つのタブ
  2. 2番目と3番目のタブにエラーがあります。
[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のテストで、コマンドライン解析用のトークンセパレータにキャリッジリターンとラインフィードを追加しようとしました。 しかし、私があなたの例を実行しようとしたとき、スペースが前に付いていない限り、バックティックが新しい行をエスケープすること思います。
CMDシェル内から例を実行すると(改行は^を使用してエスケープされます)、ターミナルソースコードにトークン区切り文字として\ rと\ nがなくてもすでに機能します。

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

実際、ええ、元の問題の例を実行したが、改行をエスケープするバックティックの前にスペースを置くと、次のようになります。

image

PowerShellがエスケープされた改行を処理する方法の問題のように見えます。

あなたは絶対に正しいです。 申し訳ありませんが、私はその構文の純粋なPowerShellの例を考え出す(またはechoargs.exeを使用する)つもりだったので、何が起こっているのかを確実に知ることができました。 私のような他のPowerShellユーザー(PowerShellが文字列を暗黙的に実行することを忘れている)との話し合いに役立つ場合は、PowerShellが間違っていることの簡単な例を次に示します。

注:Write-Hostは任意の数の文字列パラメーターを取ります

image

そしてもちろん、そのような奇妙な文字列を「ネイティブ」コマンドに渡すと、PowerShellはそれを引用符で囲みます。

image

基本的に、何が起こるかはこれです:

  1. シェルであるため、PowerShellは文字列パラメーターを引用符で囲む必要はありません。
    2、PowerShellは、文字列内のエスケープされた改行を、コマンドラインの最後(行の継続)でエスケープされた改行とは異なる方法で処理します

`; (エスケープしたので文字列だけです)と改行の間にスペースを残さない場合、PowerShellはそれが文字列の一部であり、別個の行ではないと見なす必要があります-継続マーク。 これを回避するには、文字列から_implicitly_スペースで区切るか(上記の「回避策」で行ったように)、明示的に文字列を引用符で囲みます。

wt `
new-tab -p "PowerShell Core" ";"`
split-pane -H -p "Windows PowerShell" ";"`
split-pane -p cmd
このページは役に立ちましたか?
0 / 5 - 0 評価