env and PATH
Federico Kircheis
federico@kircheis.it
Thu Jan 2 09:34:06 GMT 2025
On 20/12/2024 23.15, Brian Inglis via Cygwin wrote:
> Hi Federico,
>
> Looks like non-Cygwin program launch is messing up PATH not on the
> current drive:
>
> $ cd /proc/cygdrive/d
> $ cat -A /proc/cygdrive/d/tmp/t.cmd
> echo %PATH%^M$
> $ env -i PATH='C:\Windows;C:\Windows\system32;' /bin/sh -c 'echo $PATH'
> C:\Windows;C:\Windows\system32;
> $ env -i PATH='C:\Windows;C:\Windows\system32;' `cygpath $COMSPEC` /s /c \
> "d:\tmp\t.cmd"
> D:\>echo C;D:\Windows;C;D:\Windows\system32;
> C;D:\Windows;C;D:\Windows\system32;
> D:\>exit
I did some other testing
From cygwin, without using env explicitly
> PATH='D:\windows'
/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe
> echo $env:PATH
D;C:\windows
(similar result for cmd)
From powershell
> $env:PATH="D:\windows"
> C:/Windows/System32/WindowsPowerShell/v1.0/powershell.exe
> echo $env:PATH
D:\windows
(similar result for cmd)
I also tried
PATH='D:\windows' /usr/bin/cygstart
/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe
hoping it would do the trick, but PATH is still "broken", and powershell
starts in a separate window :(
>
> On 2024-12-20 09:51, Federico Kircheis via Cygwin wrote:
>> Hello to everyone,
>>
>>
>> I've noticed that env seems to handle the environment variable PATH in
>> a particular way
>>
>>
>> -----
>> > cd /d;
>> > env -i PATH='C:\Windows;C:\Windows\system32;' /c/Windows/System32/
>> WindowsPowerShell/v1.0/powershell.exe
>> # in the powershell instance
>> echo $env:PATH
>> C;D:\Windows;C;D:\Windows\system32;
>> ----
>>
>>
>> From this and other examples it seems that env uses for PATH as
>> separator, then preprends the current drive to all paths that begin
>> with '\' (thus all of them), and ";" is treated as part of the path
>>
>>
>> I would like to use the PATH as-is in the invoked program, just like
>> it is done for other variables, for example
>>
>> ----
>> cd /d
>> env -i OPATH='C:\Windows;C:\Windows\system32;' /c/Windows/System32/
>> WindowsPowerShell/v1.0/powershell.exe
>> # in the powershell instance
>> echo $env:OPATH
>> C:\Windows;C:\Windows\system32;
>> ----
>>
>> in this case OPATH is forwarded as-is to powershell.exe.
>>
>> I understand that PATH is special, that for cygwin processes some
>> transformation might be necessary.
>>
>> But is there any way to achieve what I'm trying?
>>
>> I search if there is maybe a separation option for telling env to use
>> PATH as- is, but could not find none.
>>
>> Best
>>
>> Federico
More information about the Cygwin
mailing list