gpt4 book ai didi

powershell - 从Cygwin运行脚本时,Powershell Read-Host cmdlet导致挂起

转载 作者:行者123 更新时间:2023-12-03 00:00:27 25 4
gpt4 key购买 nike

我试图从Cygwin内部运行Powershell脚本(最终将通过Cygwin SSH运行),并且发现用户输入似乎被忽略了。该脚本显示一个菜单,然后使用Read-Host "Your selection:"接收输入。

光标闪烁,但是“您的选择”文本没有出现,我输入的内容似乎只是写入控制台本身,被脚本忽略。

有谁知道可能是错的吗?

非常感谢。

最佳答案

我猜Cygwin控制台无法实现Powershell控制台的主机(System.Management.Automation.Internal.Host.InternalHostUserInterface)所依赖的API。还是没有按预期实现它们。如果您尝试通过SSH运行,肯定会是这种情况。 MS具有有关如何编写自定义主机UI的文档。因此,如果您想通过SSH运行PS,似乎有4种可能性:

  • 编写自己的PSHost实现
  • 查找其他人的PSHost实现
  • 将SSH的客户端stdin和stdout用作双向管道,并编写REPL,以从管道(SSH stdin)接收输入并将输出发送到管道(SSH stdout)。除非您自己实现,否则此选项意味着您将丢失行编辑,历史记录,制表符补全等。
  • 不确定此代码是否可以工作,但是如果可行,则可能是最少的代码实现。创建一个子PS进程。将 child 的标准输出stdin重定向到父PS进程。您从SSH stdin获得的所有输入都写入子PS的stdin,并且从child的stdout中读取的所有输出都写入SSH stdout。您可能需要对SSH stdin和子级stdout的读取使用异步I / O,以防止挂起(如果脚本正在等待从子级stdout的读取,但是子级PS没有更多输出,则脚本已挂起)。实际上,SSH用户正在控制子PS进程,而父PS进程只是将两者结合在一起的粘合剂。
  • 关于powershell - 从Cygwin运行脚本时,Powershell Read-Host cmdlet导致挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31213492/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com