TMP/TEMP environment variable and /tmp

Ken Brown kbrown@cornell.edu
Thu Sep 17 21:55:35 GMT 2020


On 9/17/2020 5:07 PM, Kristian Ivarsson via Cygwin wrote:
> 
>>>>>>> Does anyone know the rational with this behaviour and what can be
>>>>>>> done to get hold of the (real) Windows TMP/TEMP
>>>>>>> environment-variable-values (in a
>>>>>>> (hopefully) platform independent way) ?
>>>>>> so if you are making your custom tree, try to stick on that
>>>>>> expectation and have both directories.
>>>>> In general, you are free to set TMP to a directory of your choice,
>>>>> that's the purpose of that variable, no need to sync it with some root.
>>>>> There is a comment in /etc/profile:
>>>>>     # TMP and TEMP as defined in the Windows environment
>>>>>     # can have unexpected consequences for cygwin apps, but it does not
>>>>> explain what consequences that might be; probably some trouble with
>>>>> ACL/access permissions for temporary files.
>>>> Nowadays that would be $LOCALAPPDATA/Temp, or if you really insist, the
>>>> content of /proc/registry/HKEY_CURRENT_USER/Environment/TMP (or TEMP),
>>>> after similarly expanding environment variable references found in that.
>>>>
>>>> The fact that getting Windows' idea of the user's TEMP directory is not
>>>> immediately platform independent may well have been part of the rationale
>>>> for not even trying that.
>>>
>>> Well, at least it's up to the user
>>>
>>> If the user sets its TMP-variable to "C:\Jabba Dabba Dooo" or "/jabba dabba doo", I expect the value of getenv("TMP") should be just that and regardless of OS the value returned is whatever the variable is set to and not magically changed to "/tmp"
>> Of course and that's not happening, no worries. The issue was that TMP is set in /etc/profile and not inherited from the Windows environment.
> 
> Well, where my Cygwin-compiled-application is running, there’s no Cygwin-installation and thus no /etc/profile so it cannot be set there (if /etc/profile is not a built in resource in every executable), so there must be some text-value inside the compiled executables used in some manner somehow

There must be something going on in your environment that you haven't told us 
yet.  I just tried the following test case:

#include <stdio.h>
#include <stdlib.h>
int
main ()
{
   printf ("The value of TMP is %s\n", getenv ("TMP"));
}

In a Cygwin bash shell I get

   The value of TMP is /tmp

Running the same executable under a Windows Command Prompt, I get

   The value of TMP is /c/Users/kbrown/AppData/Local/Temp

So Cygwin converts TMP to a Posix path [*], but it doesn't change it to "/tmp".

Ken

[*] See environ.cc:303 for a list of environment variables that Cygwin converts.


More information about the Cygwin mailing list