Re: Problems with wincfg

Martin Gregorie <[email protected]>
Newsgroups gmane.comp.emulators.wine.user
Organization Martin Gregorie
Message-ID <[email protected]>
On Tue, 2012-06-19 at 13:59 -0500, David Bailey wrote:
> I'm having difficulty getting my password back for the bugs website, but I wanted to add that testing for USER == root doesn't seem to handle sudo:
> 
> sudo echo $USER
> 
> returns 'dave' for me.
> 
This depends on when $USER is evaluated and (in a bash session) when the 
value is substituted for the variable name. In your example substitution 
will occur when bash parses the command line, i.e. 'dave' was substituted 
for $USER before sudo was executed. OTOH, if the substitution done is inside
a simple script which is run under the control of sudo, then the substitution 
takes place within the environment established by sudo. Here you go:

$ cat test
#!/bin/bash
echo $USER
$ ./test
kiwi
$ sudo ./test
root
$ 

What happens is that this time no substitution happens when the command
is parsed. Instead, sudo changes user to root and spawns a shell under
that user. This shell executes the script by spawning a second shell (by
executing #!/bin/bash as 'root') and this evaluates $USER and does the
substitution. 

Of course, much the same applies if the value of USER is retrieved
within a C program by calling getenv(): again, its a delayed evaluation
that would happen after sudo has done its thing. Finally, take a look at
the next version of my script and think about what it does:

$ cat ./test
#!/bin/bash
if [ -n "$1" ]
then
	echo $1
else
	echo $USER
fi
echo "Local USER is $USER"
$ sudo ./test $USER
kiwi
Local USER is root
$ sudo ./test 
root
Local USER is root


Martin
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.