Запуск оболочки входа с использованием sudo внутри сценария оболочки в Mac OSX

Я пытаюсь запустить некоторые сценарии bash, которые мы написали для Linux, на Mac OS X Mountain Lion. Скрипт выполняет

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

Нет, я запускаю сценарий от имени user1 и пытаюсь переключиться на user2 в сценарии. На самом деле мне нужно, чтобы он работал так, как есть другие части, которые нужно запускать как user1.

В линуксе я получаю

/home/user2

В Mac OS X я получаю

/Users/user1

Таким образом, на самом деле он не выполняет вход в систему, и поэтому любой скрипт, который полагается на то, что мы вошли в систему как пользователь2, затем терпит неудачу, поскольку он не ссылается ни на .bash_profile/.bashrc для пользователя2

Некоторое время боролся с этим, и кажется, что теперь есть способ заставить OS X вести себя так же, как Linux.


person aorticDefiance    schedule 17.08.2013    source источник


Ответы (1)


Ваша оболочка интерпретирует переменную $HOME в heredoc до того, как ввод достигнет оболочки su. Вам нужно избежать $:

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

Настоящий вопрос заключается в том, почему это работает на вашем компьютере с Linux.

person Kevin    schedule 17.08.2013
comment
Спасибо, это очень помогает, похоже, что с ящиком Linux кто-то возился с этим пользователем. Но настоящая проблема, с которой я сталкиваюсь, заключается в том, что Mac OS X не запускает .bashrc. Надеюсь, теперь, когда у меня есть дескриптор $HOME, это больше не проблема. - person aorticDefiance; 17.08.2013