如何将命令传递到在新 Windows 终端中打开的 shell 中

如何将命令传递到在新 Windows 终端中打开的 shell 中

我可以从 PowerShell 运行以下命令来启动另一个 PowerShell 实例,更改窗口名称,然后ls从新的 PowerShell 实例运行命令并打开 Chrome 到特定的网站。

start powershell `
"-noexit", `
"`$host.ui.RawUI.WindowTitle` = 'list files and goto SO'; `
ls ;`
Start-Process chrome.exe https://stackoverflow.com/"

如何在新的 Windows 终端 (wt) 中执行同样的事情?

从 PowerShell 运行以下命令将打开 wt 到“Windows Powershell”配置文件并更改“Windows Powershell”选项卡的标题。

start wt '-p "Windows PowerShell" --title  "list files and goto SO" '

但是,我无法传递任何其他命令在 Windows 终端“Windows Powershell”配置文件 shell 中执行。

目前可以实现吗?

我知道以下情况: https://github.com/microsoft/terminal/pull/3495 https://docs.microsoft.com/en-us/windows/terminal/command-line-arguments?tabs=windows

答案1

使用 Windows 终端的命令行参数这篇文章在我看来有点不清楚(甚至令人困惑)。但是,(默认)wt命令new-tab提供了commandline参数以及(或代替?)参数-p profile-name。所以使用命令行定义为powershell.exe -Help。例如

  • wt PowerShell.exe -NoExit -Command "& {$Host}"从 Windowscmd命令提示符,或
  • wt.exe PowerShell.exe -NoExit -Command "& {`$Host}"从公开PowerShell会议(注意逃逸美元符号明确使用.exe文件扩展名wt.exe)。

顺便提一句,我看不出wt PowerShell.exe -NoExit -Command "& {$Host}"和之间有什么区别wt -p "Windows PowerShell" PowerShell.exe -NoExit -Command "& {$Host}"在这两种情况下,标签页PowerShell都会开始显示wt这是因为我将默认配置文件设置为Windows PowerShell下。settings.json%LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\

不幸的是,分号 ( ;) 在一个实例中用于wt创建新选项卡;因此,它不适用于作为 PowerShell 命令分隔符。因此,

  • wt PowerShell.exe -NoExit -Command "& {$Host; $PWD}"将要失败不知道如何逃避,但我知道解决方法
  • wt PowerShell.exe -NoExit -Command "& {$Host, $PWD}";尽管这样做仍然是可能的,但我发现了一个常规的解决方案最近:使用\(反斜杠)作为;(分号)它的wt参数的转义字符:
  • wt PowerShell.exe -NoExit -Command "& {$Host\; $PWD}"

对于更复杂/高级的命令,应用分组运算符( )在与您的用例类似的用例中如下(从打开的PowerShell会话中运行):

wt.exe PowerShell.exe -NoExit -Command "& {(`$Host.UI.RawUI.WindowTitle='list files and goto SO'),`$PWD.Path,(Push-Location D:\Downloads),(ls e*.ps1),(Start-Process -PassThru chrome.exe https://stackoverflow.com/)}"

Windows 终端中的结果如下:

Windows 终端

上述代码将暂停父级,Powershell直到终端关闭;如果你想继续在父级中Powershell使用

Start-Process wt.exe -ArgumentList "PowerShell.exe", "-NoExit", "-Command", "& {(`$Host.UI.RawUI.WindowTitle='list files and goto SO'),`$PWD.Path,(Push-Location D:\Downloads),(ls e*.ps1),(Start-Process -PassThru chrome.exe https://stackoverflow.com/)}"

编辑:

Windows 终端使用\(反斜杠)作为;(分号)的转义字符。因此,我将后一种解决方法替换为等效的常规的解决:

Start-Process wt.exe -ArgumentList "PowerShell.exe", "-NoExit", "-Command", "& {`$Host.UI.RawUI.WindowTitle='list files and goto SO'\;`$PWD.Path\;Push-Location D:\Downloads\;ls e*.ps1\;Start-Process -PassThru chrome.exe https://stackoverflow.com/}"

或者,使用-p标志:

Start-Process wt.exe -ArgumentList '-p "Windows PowerShell"', "PowerShell.exe", "-NoExit", "-Command", "& {`$Host.UI.RawUI.WindowTitle='list files and goto SO'\;`$PWD.Path\;Push-Location D:\Downloads\;ls e*.ps1\;Start-Process -PassThru chrome.exe https://stackoverflow.com/}"

相关内容