首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Cygwin运行脚本时,Powershell的Read-Host cmdlet导致挂起

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

Stack Overflow用户
提问于 2015-07-04 03:56:46
回答 1查看 473关注 0票数 2

我尝试在Cygwin中运行powershell脚本(最终将在Cygwin SSH上运行),我发现用户输入似乎被忽略了。该脚本显示一个菜单,然后使用Read-Host "Your selection:"接收输入。

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

有没有人知道可能出了什么问题?

非常感谢。

EN

回答 1

Stack Overflow用户

发布于 2015-11-18 06:45:09

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

  1. 编写您自己的PSHost和别人的PSHost,将您的SSH的客户机stdin和stdout作为双向管道,并编写一个从管道(SSH stdin)获取输入并将输出发送到管道(SSH stdout)的REPL。除非您自己实现它,否则这个选项意味着您将丢失行编辑、历史记录、制表符完成等功能。
  2. 不确定这个选项是否有效,但如果可以,它可能是要实现的代码量最少的一个。创建子PS进程。将子进程的stdout、stdin重定向到父PS进程。从SSH stdin获得的所有输入都写入到子PS的stdin,从子PS的stdout读取的所有输出都写入SSH stdout。您可能希望对SSH标准输入和子标准输出上的读取使用异步I/O,以防止挂起(如果脚本正在等待从子标准输出读取数据,但是子PS没有更多输出,则脚本挂起)。实际上,SSH用户正在控制子PS进程,而父PS进程只是将两者连接在一起的粘合剂。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31213492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档