我遇到了一个奇怪的问题,cygwin 在安装之间表现不一致,特别是 scp。在这两种情况下,我的 Windows PATH 中都有 c:\cygwin\bin。当我从Windows 命令提示符然而,我在两次安装之间得到了非常不同的结果:
scp /cygdrive/c/something.txt User@server:${HOME}/something.txt
在一台机器上它可以很好地传输文件,但在另一台机器上我收到一个错误:
/cygdrive/c/something.txt: No such file or directory
但是,如果我在出现错误的机器上以这种方式执行命令,它可以正常传输:
scp /c/something.txt User@server:${HOME}/something.txt
为什么会有差异?我需要在 cygwin 中配置某些东西才能使其与 /cygdrive/c 配合使用吗?
更新:这里有更有趣的东西。如果我ls /c
从 Windows 命令提示符执行此操作,我会得到您期望的结果,即 C: 中的所有内容的列表。但是,ls /cygdrive/c
它说它不存在。从 cygwin bash 运行这些命令会产生完全相反的行为。
答案1
答案2
问题出在我的 PATH 优先级上。
PATH=%PATH%;C:\cygwin\bin
但它必须
PATH=C:\cygwin\bin;%PATH%
修复 PATH 后/cygdrive/c
按预期解决。
答案3
我在安装 Git、将其 bin 添加到我的 PATH、然后安装 Cygwin 并运行 ssh-host-config 为 sshd 设置 Windows 服务后遇到了这个问题。问题似乎是 ssh-host-config 注册服务的方式导致 sshd 在设置 scp 连接的过程中调用 Git 的 bash(或 scp,或 ssh 提供的命令)可执行文件,而不是 Cygwin 的可执行文件。为了解决这个问题,我删除了 ssh-host-config 安装的服务。从 Cygwin bash 中,我执行了cygrunsrv -R sshd
。然后我使用 PATH 变量覆盖重新注册了该服务,
cygrunsrv -I sshd -d "CYGWIN sshd" -p "/usr/sbin/sshd" \
--env "PATH=/usr/bin:/bin:/cygdrive/c/WINDOWS/system32:/cygdrive/c/WINDOWS:$PATH" \
-a "-D" -u <priv_user> -w <password>
其中 priv_user 可能是 cyg_server。请参阅http://cygwin.com/ml/cygwin/2005-05/msg00012.html。