Ao usar -
(ou -l
), você invoca um shell de login interativo para o usuário especificado.
Dependendo do que os arquivos de inicialização do shell fazem para o usuário determinado, o comando não pode ser executado. Por exemplo, se eles executarem novamente um shell usando exec
(sem passar os parâmetros da linha de comando do shell de chamada), diretamente ou por meio de algo como tmux
ou ssh-agent
, a cadeia de comando será perdida. / p>
Por exemplo: eu tenho
if tmux has-session; then
exec tmux attach-session
else
exec tmux
fi
... no meu ~/.profile
, e é por isso que su -l me some_command
não executará some_command
(em vez disso, um shell interativo é iniciado dentro de tmux
).
Para executar um comando como outro usuário usando su
, faça
# su -c some_command username
Do Ubuntu su(1)
manual:
-
,-l
,--login
Provide an environment similar to what the user would expect had the user logged in directly.
Ou configure sudo
e use
$ sudo -u user some_command