这个想法是为了摆脱当连接到作为Windows窗口(sshd)中的服务运行的cygwin deamon时给出的CYGWIN警告:
有问题的情况:
> ssh -i <my private key> me@server "ls d://path//to//folder//" cygwin warning: MS-DOS style path detected: d://path//to//folder// Preferred POSIX equivalent is: /cygdrive/d/path/to/folder/ CYGWIN environment variable option "nodosfilewarning" turns off this warning. Consult the user's guide for more details about POSIX paths: http://cygwin.com/cygwin-ug-net/using.html#using-pathnames [...]
此警告可能会导致执行的远程命令返回警告,而不是“0”状态代码。
警告告诉我们在CYGWIN环境variables中设置以下值: “nodosfilewarning”
问题在于它是否在下列任何地方设置,都不会进入远程环境:
testing用例:
> ssh -i <my private key> me@server "env | grep CYGWIN" CYGWIN=CYGWIN sshd
CYGWIN环境variables永远不会包含适当的值,无论您在哪里设置它…
这个问题来自于sshd是通过cygrunsrv.exe运行的,而cygrunsrv.exe是通过在CYGWIN终端中调用ssh-host-config来设置的 。 如果未使用-c标志修改CYGWIN环境变量,或者在从ssh-host-config脚本执行时查询未修改,则会在安装时为CYGWIN环境变量设置默认值:
*** Query: Enter the value of CYGWIN for the deamon: [] CYGWIN sshd
有关选项和详细信息,请参阅./bin.ssh-host-config脚本。
--cygwin -c <options> Use \"options\" as value for CYGWIN environment var
据我所知,在不卸载服务的情况下修改CYGWIN环境变量并使用-c标志重新进行安装是不可能的! 但是,如果编辑在此处找到的注册表值,则可以修改一次安装的服务参数:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\sshd\Parameters\Environment CYGWIN
在值的末尾修改条目并添加nodosfilewarning将解决我们的问题!
我们可以通过再次重新执行测试用例来验证它确实起作用了:
> ssh -i <my private key> me@server "env | grep CYGWIN" CYGWIN=CYGWIN sshd nodosfilewarning
从此,执行有问题的案例不应再显示警告消息!