首先,我想道歉,如果标题不够描述,我很难处理这个问题。我正在尝试使用将为另一个进程执行的powershell脚本为svn合并构建自动化。我正在使用的功能如下:
function($target){
svn merge $target
}
现在,当合并中存在冲突时,我的问题就出现了。该命令的默认行为是请求来自用户的输入并相应地继续。我想使用预定义的值自动化这个过程(显示差异,然后推迟合并),但我还没有找到办法。总之,我希望完成的工作流程如下:
有没有办法在PowerShell中这样做?非常感谢你提供给我的任何帮助/线索。
编辑:
澄清我的问题:我想在powershell脚本中执行的命令需要时自动提供一个值,如下例所示:
编辑2:
以下是使用@ mklement0提供的代码段进行的测试。不幸的是,它没有按预期工作,但我认为添加此版本以澄清每个完整的问题是一种麻烦
答案 0 :(得分:0)
您可以将SVN命令行输出存储到变量中,并根据需要解析该分支并进行分支。每行输出都存储在一个新的枚举器中(存储在PS变量中的cli输出是数组格式)
$var = & svn merge $target
$var
答案 1 :(得分:0)
注意:
此答案无法解决OP的问题,因为特定目标实用程序svn
显然会在进程“时禁止提示 stdin输入不是来自终端(控制台)。
但是,对于仍然提示的实用程序,下面的解决方案应该在规定的限制范围内工作。
通常,在尝试模拟用户输入之前,值得调查一下目标实用程序是否通过其命令行选项提供编程对行为的控制< / em>,这既简单又强大。
虽然检测给定的外部命令是否提示输入用户输入是微不足道的:
让我们假设以下批处理文件foo.cmd
,它会提示2个提示并回显输入:
@echo off
echo begin
set /p "input1=prompt 1: "
echo [%input1%]
set /p "input2=prompt 2: "
echo [%input2%]
echo end
现在,让我们将回复one
和two
发送到该批处理文件:
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 上工作所必需的 - { {1}} 不工作。
'one', 'two' | ./foo.cmd
必须如何表示为<
,以确保它被传递到'<'
,而不是由PowerShell预先解释(cmd.exe
isn&#39 ; t支持)。相比之下,<
在 Unix 平台(PowerShell Core)上工作。