سؤال

I am trying to run some bash scripts that we wrote on Linux on Mac OS X Mountain Lion. The script performs a

#!/bin/bash
sudo su -l <username>  << EOF
echo $HOME
#execute command that is only on the path of <username>
EOF

No I am running the script as user1 and I am in the script trying to switch to user2. I actually need it to run like this as there are other portions that need to run as user1.

On linux I get

/home/user2

On Mac OS X I get

/Users/user1

So its not actually performing a login and as such any script that relies on us being logged in as user2 then fails as it doesn't reference either .bash_profile/.bashrc for user2

Been struggling with this for a while now and it seems as if there is now way to get OS X to behave in the same way as linux does.

هل كانت مفيدة؟

المحلول

Your shell is interpreting the $HOME variable in the heredoc, before the input reaches the su shell. You need to escape the $:

bash-3.2$ sudo su -l root <<EOF
> echo $HOME
> echo \$HOME
> EOF
/Users/kevin
/var/root

The real question is why does it work on your Linux box.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top