gpt4 book ai didi

powershell - 在 powershell 脚本中管理来自外部命令的输入

转载 作者:行者123 更新时间:2023-12-04 18:31:32 24 4
gpt4 key购买 nike

首先,如果标题不够描述,我想道歉,我很难处理这个问题。我正在尝试使用将为另一个进程执行的 powershell 脚本为 svn merge 构建自动化。我使用的函数如下所示:

function($target){
svn merge $target
}

现在,当合并中存在冲突时,我的问题就出现了。该命令的默认行为是请求用户输入并相应地进行。我想使用预定义的值来自动化这个过程(显示差异然后推迟合并),但我还没有找到一种方法来做到这一点。总之,我希望完成的工作流程如下:

  1. 检测命令执行是否需要任何输入才能继续
  2. 提供默认输入(在我的特定情况下是“df”,然后是“p”)

有没有办法在 powershell 中做到这一点?非常感谢您能为我提供的任何帮助/线索。

编辑:

澄清我的问题:我想在 powershell 脚本中执行的命令需要它时自动提供一个值,如以下示例所示:

Requesting user input

编辑 2:

这是使用@mklement0 提供的代码片段进行的测试。不幸的是,它没有按预期工作,但我认为添加这个版本来澄清每个完整的问题是值得的

预期行为: Expected behavior

实际结果: Actual result

最佳答案

注意:

  • 这个答案没有解决 OP 的问题,因为特定的目标实用程序 svn 在进程的标准输入不是来自 终端(控制台)。

  • 但是,对于仍然提示的实用程序,在规定的限制范围内,下面的解决方案应该有效。

  • 通常,在尝试模拟用户输入之前,有必要调查目标实用程序是否通过其命令行选项提供对行为的程序化控制,这既更简单又更健壮。


虽然检测给定的外部命令是否提示用户输入绝非易事:

  • 您可以盲目发送假定的回复,
  • 假设不需要任何情况变化(除非发生特定调用根本不提示,在这种情况下输入将被忽略)。

让我们假设以下批处理文件 foo.cmd ,它提出 2 个提示并回显输入:

@echo off
echo begin
set /p "input1=prompt 1: "
echo [%input1%]
set /p "input2=prompt 2: "
echo [%input2%]
echo end

现在让我们将响应 onetwo 发送到该批处理文件:

C: PS> Set-Content tmp.txt -Value 'one', 'two'; ./foo.cmd '<' tmp.txt; Remove-Item tmp.txt
begin
prompt 1: one
[one]
prompt 2: two
[two]
end

注意:

  • 出于我不知道的原因,使用中间 文件 是此方法在 Windows 上工作所必需的 - 'one', 'two' | ./foo.cmd 工作。

    • 请注意 < 必须如何表示为 '<',以确保它被传递到 cmd.exe 而不是由 PowerShell 预先解释(其中不支持 <)。
  • 相比之下,'one', 'two' | ./foo 确实Unix 平台 (PowerShell Core) 上工作。

关于powershell - 在 powershell 脚本中管理来自外部命令的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44751792/

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