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

标签 powershell cygwin

我试图从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/

    相关文章:

    curl - cygwin- curl : (3) Port number ended with '"' error

    c++ - "No newline at end of file"警告,即使在换行之后

    windows - 带有 SourceTree 的 git 和 Cygwin 路径

    powershell - 列出所有先前加载的 PowerShell 变量

    azure - Powershell - 从 -out 表中仅选择一个值

    sql-server - 用BulkCopy覆盖SQL Server表数据

    python - 在 PowerShell 中设置 Python 的路径?

    cygwin - 如何修复 Windows 上的 "could not compile dependency :bcrypt_elixir"错误?