Obtenha o shell de login como root 'su -l' sem alterar o diretório

1

Existe uma maneira de executar algo como su -l que lê todos os arquivos shell de login, mas não altera o diretório em que você está?

Por alguma motivação, estou tentando criar um pacote do Slackware Linux. A maioria dos pacotes de tempo será construída corretamente se você usar apenas su . No entanto, existem alguns pacotes como sbcl que dependem de TeX tools e falharão sem su -l . Eu prefiro usar su quando eu puder me safar porque não altera o diretório atual.

Se eu estiver em um diretório como ~/opt/haskell-stack-slackbuild .

$ pwd
/home/<user>/opt/haskell-stack-slackbuild

Se eu executar apenas su , voltarei ao mesmo diretório, mas se eu executar su -l , serei descartado em /root , independentemente de onde eu estivesse e tenha que navegar de volta para o diretório em que estava trabalhando em.

$ su -l
# pwd
/root
    
por Gregory Nisbet 02.03.2017 / 19:14

1 resposta

2

Por que não apenas o .profile da raiz da fonte depois que você está executando no shell da raiz?

$ su
Password: 
# . ~root/.profile
# 

É claro que você pode criar qualquer script de qualquer lugar uma vez no shell do root e, assim, consertar ou alterar o ambiente do shell de raiz de qualquer maneira que seja necessária.

Existem muitas maneiras de se injetar diferentes configurações no shell root diretamente do shell de origem usando o fato de que su aceita "parâmetros do shell" em sua linha de comando. Aqui está um exemplo que dá ao comando su as instruções para executar o shell de raiz de tal forma que o perfil da raiz de origem e inicie um shell com o ambiente desse perfil (que, por causa do exec , substitui o shell iniciado por su ):

$ su -- root -c ". /root/.profile; exec /bin/sh" 
Password: 
# 
    
por 02.03.2017 / 20:39

Tags