cygwin cygdrive paths and Windows Command Prompt
I'm having a weird issue with cygwin acting inconsistently between installations, specifically scp. I have c:\cygwin\bin in my Windows PATH in both cases. When I run the following command from a Windows Command Prompt, however, I get very different results between the two installations:
scp /cygdrive/c/something.txt User@server:${HOME}/something.txt
On the one machine it transfers the file just fine, but on the other machine I get an error:
/cygdrive/c/something.txt: No such file or directory
However, if I execute the command this way on the machine that gave me the error, it transfers just fine:
scp /c/something.txt User@server:${HOME}/something.txt
Why the differences? Is there something I need to configure within cygwin to make this work with /cygdrive/c?
UPDATE: Here's something more interesting. If I do ls /c
from a Windows command prompt I get what you would expect, as list of everything in C:. However, ls /cygdrive/c
says that it doesn't exist. Running those commands from the cygwin bash yields exactly the opposite behavior.
Solution 1:
The correct way to do this is using the mount command:
mount --change-cygdrive-prefix /c
or in your case, restore the default /cygdrive
prefix...
Solution 2:
The problem was my PATH precedence. It was
PATH=%PATH%;C:\cygwin\bin
but it needed to be
PATH=C:\cygwin\bin;%PATH%
After fixing the PATH /cygdrive/c
resolved as expected.
Solution 3:
I encountered this problem after I installed Git, added it's bin to my PATH, then installed Cygwin and ran ssh-host-config to setup a Windows service for sshd. The problem seems to be that the way ssh-host-config registers the service causes sshd to invoke Git's bash (or scp, or ssh-provided command) executable rather than Cygwin's in the process of setting up an scp connection. To fix this, I removed the service as installed by ssh-host-config. From Cygwin bash, I executed cygrunsrv -R sshd
. Then I re-registered the service with a PATH variable override,
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>
where priv_user is probably cyg_server. See http://cygwin.com/ml/cygwin/2005-05/msg00012.html .