我试图查看在执行所有构建任务期间gradle使用的确切编译器命令(在我的情况下为gcc)。运行with --debug不会输出这些命令,并且build / tmp中的输出文件也没有。我目前正在使用Gradle 2.6
我想知道为什么su在ssh命令中执行似乎没有在执行后续命令之前具有切换用户的预期效果,如下图所示:
以下命令:
bob@server1:~$ sudo ssh -n root@server2 "su bob; env"
Run Code Online (Sandbox Code Playgroud)
产生以下输出:
...
USER=root
PWD=/root
HOME=/root
LOGNAME=root
...
Run Code Online (Sandbox Code Playgroud)
我希望输出反映用户 bob 会观察到的内容,但它是 root 用户的环境。但是,我发现以下命令达到了预期的效果:
bob@server1:~$ sudo ssh -n root@server2 "su bob -c \"env\""
Run Code Online (Sandbox Code Playgroud)
此命令产生以下输出:
...
USER=bob
PWD=/root
HOME=/users/bob
LOGNAME=bob
...
Run Code Online (Sandbox Code Playgroud)
我想了解为什么第一种方式(执行"su bob; env")不起作用。
当ssh hostname提示时带有
The authenticity of host 'foobar' can't be established.
ECDSA key fingerprint is ...
Are you sure you want to continue connecting (yes/no)?
Run Code Online (Sandbox Code Playgroud)
我很想知道为什么命令:
yes yes | ssh hostname
Run Code Online (Sandbox Code Playgroud)
不能作为一种自动回答这个问题的方法.提示仍然出现并等待stdin的输入.不应该从yes程序的stdout发送"yes"到程序的stdin ssh吗?我想更深入地了解这里发生了什么以及为什么这不起作用.
为了澄清,我对实际解决绕过提示的问题不感兴趣.我纯粹有兴趣理解为什么,从根本上说,这不起作用.可能我完全误解了作品的标准,我想了解实际发生了什么.