Su -c não está funcionando e foi ignorado [fechado]

0

É explicado que, se usarmos o parâmetro su with -c , ele passará o comando para o shell do usuário e o executará.

Mas no meu ambiente, ignora totalmente a opção -c e muda para o shell do usuário.

[root@mftf~]# su - demo -c "ls -la"

[demo@mftf~]$

mas se eu usar -c sem qualquer comando, ele mostrará o erro que -c precisa de um argumento, então ele não é ignorado. Estou usando o RHEL 7.

    
por Hiếu Đại Bàng 28.09.2017 / 19:28

2 respostas

3

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
    
por 28.09.2017 / 20:05
2

Não use - (hífen) após o su. Basta executar o su demo -c 'ls -la'
Quando você invoca '-' com su, inicializa o perfil do usuário e o ambiente. Deve haver algum script dentro do perfil que não permita que o shell do usuário chegue no final. Espero que isso ajude.

    
por 28.09.2017 / 20:08

Tags