一点背景: 我有一个gradle脚本,我用它来在许多不同的机器上安装和设置几个软件 - 我在本地运行它的目的是加速部署过程。 gradle脚本将图层和服务器名称作为参数获取,并将通过执行远程ssh linux命令(rhel 6)来安装软件。
C:\work\source\tools\environment-tools>gradle -Player=service -Pserver=demo1 installSamba
Using libraries from: C:\work\source/lib
:installSamba
Trying to override old definition of datatype scp
Trying to override old definition of datatype sshexec
--- Executing: yes | yum install samba
--- failOnError = false, using sudo
>>>>>
Command: echo 'sudo_pass' | sudo -Ss 'yes | yum install samba'
[sudo] password for root:
/bin/bash: yes | yum install samba: command not found
[ant:sshexec] Remote command failed with exit status 127
我正在尝试执行的命令:只需使用yum安装samba,但也会触发yes以自动执行默认的samba安装。
问题: 当我执行脚本时,远程执行以下命令来安装samba: echo'sudo_pass'| sudo -Ss'是| yum install samba'
为什么在以下完美执行时会失败(但是与人工互动,即按y然后返回): echo'sudo_pass'| sudo -Ss yum install samba
我想我需要正确设置以下小型gradle安装脚本:对我做错了什么的想法?
task installSamba << {
forAllServers { props ->
ssh('yes | yum install samba', props)
}
}
答案 0 :(得分:1)
我后来发现,为了执行像上面那样的gradle脚本,必须在远程机器上降级sudo。我做的降级是从版本:1.7.4p5到sudo版本1.7.2p2。 这是一种可行的替代方案,但不是最佳解决方案。我宁愿在主机上运行最新的sudo更新。真正的问题是:如何处理并修复上述简单脚本以便执行