2017-06-26 54 views
3

首先,如果标题不够具描述性,我想表示歉意,但我很难处理这个问题。我正在尝试使用powershell脚本为另一个进程执行svn合并构建自动化。我正在使用的功能如下所示:在PowerShell脚本中管理来自外部命令的输入

function($target){ 
    svn merge $target 
} 

现在,我的问题发生在合并中存在冲突时。该命令的默认行为是请求来自用户的输入并据此进行。我想使用预定义的值自动化这个过程(显示差异,然后推迟合并),但我还没有找到办法。总之,我要找来完成工作流程如下:

  1. 检测命令执行是否需要任何输入进行
  2. 提供默认输入(在我的具体情况“DF”,然后“P “)

有什么办法可以在PowerShell中做到这一点?提前感谢您提供的任何帮助/线索,您可以提供给我。

编辑:

为了澄清我的问题:我想自动提供一个值时,PowerShell脚本中执行的命令,在下面的例子中需要它,如:

Requesting user input

编辑2:

这是使用@ mklement0提供的片段进行的测试。不幸的是,预期它没有工作,但我认为这是麦汁添加此版本澄清每个完整

预期行为的问题: Expected behavior

实际结果: Actual result

+0

@ mklement0确切地说,使用这种方法,无论出于何种原因,提示都不会显示。我正在改变我的方法,只是通知有冲突要解决。我可以用你的方法来做到这一点,这让我可以绕过用户输入。在中期我会在svn一侧寻找更多的文档。但无论如何,感谢您的意见,这真的帮了我很大的忙。 –

+0

很高兴听到它;虽然它不会帮助你使用'svn',我已经修复并取消删除了我的答案,以显示它是如何工作的。 – mklement0

回答

0

注意

  • 这个答案不能解决OP的问题,因为特定目标效用,svn,显然取消提示当处理stdin的输入不是从终端(控制台)到来。

  • 对于做仍然提示实用工具,但是,下面的解决方案应该工作,规定的限制范围内。

  • 一般来说,试图模拟用户输入之前,这是值得研究的目标效用是否提供了行为编程控制,通过其命令行选项,这是更简单,更稳健。


虽然这将是远离琐碎检测一个给定的外部命令是否提示用户输入:

  • 可以盲目发送推定响应,
  • 其中假定不需要情景变化(除非特定的呼叫发生吨o提示,在这种情况下输入被忽略)。

假设下面的批处理文件,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核心)工作。

+1

即使认为它不适用于我的具体情况,我将此作为接受的答案,因为肯定是解决了我最初的担忧。另外,非常感谢你的详细解释! –

0

可以SVN命令行输出的存储到一个变量,并通过和分支分析,你的愿望。输出的每一行存储到一个新的枚举(存储在PS变量CLI输出数组形式)

$var = & svn merge $target 
$var 
+2

首先,非常感谢你的回答。这段代码帮助我解决了另一个问题。不过,我想我没有正确解释我的问题。出于这个原因,我在这个问题中增加了额外的信息来澄清我在寻找什么。 –