X-Recipient: archive-cygwin AT delorie DOT com X-SWARE-Spam-Status: No, hits=-1.3 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,SARE_FREE_WEBM_LAPOSTE,T_RP_MATCHES_RCVD,T_TO_NO_BRKTS_FREEMAIL X-Spam-Check-By: sourceware.org Message-ID: <4D488C09.7050606@laposte.net> Date: Tue, 01 Feb 2011 23:41:13 +0100 From: Cyrille Lefevre User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.3) Gecko/20070326 Thunderbird/2.0.0.0 Mnenhy/0.7.5.666 MIME-Version: 1.0 To: cygwin AT cygwin DOT com Subject: Re: bad PATH conversion under XP References: <4D3F6779 DOT 5010100 AT laposte DOT net> <4D3F8295 DOT 2020109 AT cpan DOT org> In-Reply-To: <4D3F8295.2020109@cpan.org> Content-Type: multipart/mixed; boundary="------------070401050005040003090004" X-me-spamlevel: not-spam X-me-spamrating: 34.799999 X-me-spamcause: OK, (-130)(0000)gggruggvucftvghtrhhoucdtuddrfeduvddrtddvucetggdotefuucfrrhhofhhilhgvmecuoehnohhnvgeqnecuuegrihhlohhuthemuceftddtnecuucdlqddutddtmdenshgvthhtihhnghhsucdlqdeftddm X-IsSubscribed: yes Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com --------------070401050005040003090004 Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: quoted-printable Le 26/01/2011 03:10, Rafael Kitover a =E9crit : > > On 1/25/2011 7:14 PM, Cyrille Lefevre wrote: >> v2$ uname -a >> CYGWIN_NT-5.1 PC213736 1.7.7(0.230/5/3) 2010-08-31 09:58 i686 Cygwin >> >> aka >> >> Windows XP Professional Ver 5.1 Build 2600 Service Pack 3 >> >> though SSH at least : >> >> v2$ regtool get /machine/SYSTEM/CurrentControlSet/Control/Session\ >> Manager/Environment/PATH >> %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\orawin\= BIN;C:\Program >> >> Files\ATI Technologies\ATI Control Panel;"C:\Program >> Files\Hummingbird\Connectivity\7.00\Accessories\";C:\Program >> Files\QuickTime\QTSystem\;D:\sfu\Perl\bin\;D:\sfu\common\;C:\WINDOWS\sys= tem32\WindowsPowerShell\v1.0\;C:\Program >> >> Files\Samsung\Samsung PC Studio 3\ >> >> gives : >> >> /usr/local/bin:/usr/bin:/bin:/cygdrive/c/WINDOWS/system32:/cygdrive/c/WI= NDOWS:/cygdrive/c/WINDOWS/System32/Wbem:/cygdrive/c/orawin/BIN:/cygdrive/c/= Program >> >> Files/ATI Technologies/ATI Control Panel:"C:/Program >> Files/Hummingbird/Connectivity/7.00/Accessories/":/cygdrive/c/Program >> Files/QuickTime/QTSystem/:/cygdrive/d/sfu/Perl/bin/:/cygdrive/d/sfu/comm= on/:/cygdrive/c/WINDOWS/system32/WindowsPowerShell/v1.0/:/cygdrive/c/Program >> >> Files/Samsung/Samsung PC Studio 3/:/bin >> >> note the unconverted path between double-quotes : >> >> "C:/Program Files/Hummingbird/Connectivity/7.00/Accessories/" > > I saw this problem on msys, I think it applies to cygwin as well. > > If you just go into environment under advanced system settings in > control panel and remove the double quotes, it will work correctly. I'm > on Windows 7. don't be kidding ! ok, I'm joking... I'm reporting a cygwin bug... of course I know I could edit the windows environment variables. however, this problem has to be fixed. >> >> also, how about to get rid of final slashes (.../ =3D> ...) ? > > You could reprocess your PATH in your .bashrc, but the final slashes > should have no effect on how the PATH is actually used... everything is possible at shell level, even more efficiently, but since=20 the path is working by the cygwin layer, why not to clean things up. PS : no fork cleanups... # space tab newline _IFS=3D${IFS:-'=20=09 '} IFS=3D':' # clean up final /'es _PATH=3D _sep=3D for _path in $PATH; do case $path in */) _path=3D${_path#/} ;; esac _PATH=3D${_PATH}${_sep}${_path} _sep=3D':' done PATH=3D${_PATH} # cleanup twins _PATH=3D _sep=3D for _path in $PATH; do case ":${_PATH}:" in *":${_path}:"*) ;; *) _PATH=3D${_PATH}${_sep}${_path}; _sep=3D':' ;; esac done PATH=3D${_PATH} # not necessary, but... # cleanup windows paths w/ space _PATH=3D _sep=3D for _path in $PATH; do case ":${_path}:" in *' '*) ;; *) _PATH=3D${_PATH}${_sep}${_path}; _sep=3D':' ;; esac done PATH=3D${_PATH} IFS=3D${_IFS} unset _IFS _PATH _path _sep untested but should work... of course, you may do this in one loop only ! also, I reworked my version of ssh-session-env.sh Regards, Cyrille Lefevre --=20 mailto:Cyrille DOT Lefevre-lists AT laposte DOT net --------------070401050005040003090004 Content-Type: text/plain; name="ssh-session-env.sh" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="ssh-session-env.sh" #!/bin/sh # # ssh-session-env.sh - script for installation in /etc/profile.d # # because in sessions started from sshd the windows system environment # variables in general are not set except for some which are possible # special handled (like PATH, etc.) and the windows user environment # variables are not set from the actual user but from the user of the # sshd server this script is used to build this environment settings in # shells with bournish syntax which uses /etc/profile for initialization. # # authors: Kurt Franke, Cyrille Lefevre # # date: 26 january 2011 if ps -fp ${PPID} | grep -q "/usr/sbin/sshd$"; then _SECONDS_=${SECONDS:-$(date +%s)} _IFS_=${IFS} IFS=' ' eval "$( ( regtool -qv list /machine/SYSTEM/CurrentControlSet/Control/Session\ Manager/Environment regtool -qv list /user/Environment regtool -qv list /user/Volatile\ Environment ) | awk -v q="'" -v mp="$(mount --show-cygdrive-prefix)" ' function s2a(str, a, sep, i, t) { if (sep == "") sep = " +" split(str, t, sep) for (i in t) a[t[i]] = "" } function uniqp(p, i, j, k, o, n, a, s) { k = split(p, o, ":") for (i = j = 1; i <= k; i++) if (!(tolower(o[i]) in a)) a[tolower(n[j++] = o[i])] = "" p = s = "" for (i = 1; i < j; i++) { p = p s n[i] s = ":" } return p } BEGIN { s2a("APPDATA CLASSPATH QTJAVA LOCALAPPDATA USERPROFILE VS90COMNTOOLS", \ noconvert) s2a("HOMEPATH PATH TEMP TMP", override) sub(/.*\n/, "", mp) sub(/[ \t].*/, "", mp) } ! /\\ \(\)$/ { var = toupper($1) $1 = $2 = $3 = "" sub("^ +", "") environ[var] = var == "PATH" && var in environ ? \ environ[var] ";" $0 : $0 } END { flag = 1 while (flag) { flag = 0 for (var in environ) { val = environ[var] if (match(val,/%[^%]+%/)) { flag = 1 subvar = substr(val, RSTART+1, RLENGTH-2) subvar = toupper(subvar) subval = subvar in environ ? \ environ[subvar] : ENVIRON[subvar] if (subval !~ /%[^%]%/) { head = substr(val, 1, RSTART-1) tail = substr(val, RSTART+RLENGTH) environ[var] = head subval tail } } } } for (var in environ) { if (!(var in override) && var in ENVIRON) continue val = environ[var] if (!(var in noconvert) && (val ~ /;/ || val ~ /^"?.:/)) { gsub(/([a-zA-Z]):/, mp "/&", val) gsub(/\\/,"/",val) gsub(/[:"]|\/$/,"",val) gsub(/\/?;/,":",val) } if (var == "PATH") { gsub(/"([a-zA-Z]):/, mp "/&", ENVIRON[var]) gsub(/"|\/$/,"",ENVIRON[var]) gsub(/\/:/,":",ENVIRON[var]) val = uniqp(ENVIRON[var] ":" val) } gsub(q, "\\"q, val) print "export", var "="q val q } } ')" echo "elapsed: $(( ${SECONDS:-$(date +%s)} - $_SECONDS_ ))s" IFS=${_IFS_} unset _IFS_ _SECONDS_ fi # eof --------------070401050005040003090004 Content-Type: text/plain; charset=us-ascii -- 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 --------------070401050005040003090004--