strange shell output using tcsh under Cygwin
Will Parsons
wbp@nodomain.invalid
Mon Nov 6 00:15:00 GMT 2017
Under Unix-type platforms, checking on what the PATH variable is set to is
pretty easy - I typically use "env" and the displayed value of PATH is easily
parsed by eye. Under Cygwin/Windows, one can do the same, but the value of
PATH is more likely to be considerably more complicated and harder for a
human to parse. For example, this is what I see on my local machine under
Cygwin:
PATH=/usr/local/bin:/usr/bin:/c/Windows/system32:/c/Windows:/c/Windows/system32/wbem:/c/ProgramData/Oracle/Java/javapath:/c/Program Files/Common Files/Microsoft Shared/Windows Live:/c/Program Files (x86)/Common Files/Microsoft Shared/Windows Live:/c/Program Files/Dell/DW WLAN Card:/c/Program Files (x86)/Intel/iCLS Client:/c/Program Files/Intel/iCLS Client:/c/Windows/System32/WindowsPowerShell/v1.0:/c/Program Files/WIDCOMM/Bluetooth Software:/c/Program Files/WIDCOMM/Bluetooth Software/syswow64:/c/Program Files (x86)/Windows Live/Shared:/c/Program Files (x86)/Bazaar:/c/Program Files (x86)/QuickTime/QTSystem:/c/cygwin/home/william/bin:/c/ezwinports/bin:/c/Program Files (x86)/PuTTY:/usr/lib/lapack:/usr/sbin:/c/msys/1.0/local/bin
I thought it would be nice to write a simple script to make this more
comprehensible by breaking the path into separate lines, and so wrote the
following trivial script:
#!/bin/sh
echo $PATH | tr ':' '\n'
Oddly though, it does not give the expected results under Cygwin. Running
this script under Cygwin under my normal interactive script (tcsh) yields the
following:
% ./path
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/c/Windows/system32
/c/Windows
/c/Windows/system32/wbem
/c/ProgramData/Oracle/Java/javapath
/c/Program
Files/Common
Files/Microsoft
Shared/Windows
Live
/c/Program
Files
(x86)/Common
Files/Microsoft
Shared/Windows
Live
/c/Program
Files/Dell/DW
WLAN
Card
/c/Program
Files
(x86)/Intel/iCLS
Client
/c/Program
Files/Intel/iCLS
Client
/c/Windows/System32/WindowsPowerShell/v1.0
/c/Program
Files/WIDCOMM/Bluetooth
Software
/c/Program
Files/WIDCOMM/Bluetooth
Software/syswow64
/c/Program
Files
(x86)/Windows
Live/Shared
/c/Program
Files
(x86)/Bazaar
/c/Program
Files
(x86)/QuickTime/QTSystem
/c/cygwin/home/william/bin
/c/ezwinports/bin
/c/Program
Files
(x86)/PuTTY
/usr/lib/lapack
Clearly the path is being broken using spaces as well as colons.
Even thoush the shell script itself explicitly specifies "/bin/sh", the
result seems to depend on the shell being used to invoke it. Using Cugwin
bash, the same script results in the following:
sothis$ ./path
/usr/local/bin
/usr/bin
/c/Windows/system32
/c/Windows
/c/Windows/system32/wbem
/c/ProgramData/Oracle/Java/javapath
/c/Program Files/Common Files/Microsoft Shared/Windows Live
/c/Program Files (x86)/Common Files/Microsoft Shared/Windows Live
/c/Program Files/Dell/DW WLAN Card
/c/Program Files (x86)/Intel/iCLS Client
/c/Program Files/Intel/iCLS Client
/c/Windows/System32/WindowsPowerShell/v1.0
/c/Program Files/WIDCOMM/Bluetooth Software
/c/Program Files/WIDCOMM/Bluetooth Software/syswow64
/c/Program Files (x86)/Windows Live/Shared
/c/Program Files (x86)/Bazaar
/c/Program Files (x86)/QuickTime/QTSystem
/c/cygwin/home/william/bin
/c/ezwinports/bin
/c/Program Files (x86)/PuTTY
/usr/lib/lapack
/usr/sbin
/c/msys/1.0/local/bin
For comparison, I tried running the same script under FreeBSD (where tcsh is
also my normal interactive shell). Since paths with spaces are quite rare
under Unix-type systems, I added a dummy 'x x' (imaginary directory) to the
path. The result was as follows:
% ./path
/sbin
/bin
/usr/sbin
/usr/bin
/home/william/bin
/home/william/.gem/ruby/2.3/bin
/usr/local/sbin
/usr/local/bin
x x
So, I am quite puzzled.
--
Will
--
Problem reports: http://cygwin.com/problems.html
FAQ: http://cygwin.com/faq/
Documentation: http://cygwin.com/docs.html
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
More information about the Cygwin
mailing list