Muda o sudo su shell

10

Sempre que eu executar sudo su do meu% normalzsh (que usa o estrutura oh-my-zsh ), sou forçado a usar o shell Bourne antigo ( sh ) por padrão (obviamente; esse é o comportamento padrão no a maioria dos sistemas * nix-like). Se eu executar zsh de sh depois de executar sudo su , recebo o shell Z, mas sem as melhorias do oh-my-zsh.

Existe alguma maneira de alterar o shell sudo su lança para zsh ? Em caso afirmativo, é possível também ter essa instância de zsh launch usando oh-my-zsh ?

Estou usando o OS X 10.8.4.

    
por Jules 31.07.2013 / 19:56

4 respostas

18

Outra maneira de executar um shell interativo como o superusuário é sudo -s , que usa $SHELL como o shell.

Como os comentários da outra resposta mencionada, su -s /path/to/zsh não funciona no OS X.

O OS X também não suporta a troca de shells de login em /etc/passwd , mas você pode usar dscl :

$ dscl . -read /Users/root UserShell
/bin/sh
$ sudo dscl . -change /Users/root UserShell /bin/sh /bin/zsh
$ dscl . -read /Users/root UserShell
/bin/zsh
$ sudo su
My-iMac# echo $0
zsh
My-iMac# exit
$ sudo dscl . -change /Users/root UserShell /bin/zsh /bin/sh
$ 

/bin/sh não é mais uma shell Bourne na maioria das plataformas. É um Versão do bash compatível com POSIX no OS X e no Ubuntu.

    
por 31.07.2013 / 22:52
4

Na página de manual su , há duas maneiras de fazer isso.

O primeiro método é simplesmente usar o -s ou --shell flag (supondo que você esteja usando um SO * baseado em NIX com uma versão de su que suporta este argumento), seguido pelo caminho para o shell da sua escolha. Se o shell transmitido não puder ser encontrado, su será revertido para o método a seguir e, caso contrário, tentará invocar /bin/sh .

Por exemplo, você pode forçar o su a lançar o zsh (supondo que ele exista em /bin/zsh ) como:

sudo su --shell /bin/zsh

O segundo método é modificar o shell padrão especificado para o usuário root ( cuidado! ). Isso pode ser feito editando o arquivo /etc/passwd e alterando o shell especificado para o usuário root . Para ver qual shell é especificado por padrão, você pode executar o seguinte comando (supondo que o superusuário seja root):

sudo grep root /etc/passwd 

O comando deve produzir algo como root:x:0:0:root:/root:/bin/bash . Você pode simplesmente alterar o /bin/bash (ou o que estiver definido em seu sistema) para apontar para zsh .

    
por 31.07.2013 / 20:03
1

Uma maneira mais limpa que também protegerá seu sistema caso seu shell personalizado seja explodido é para criar um .profile no diretório inicial do root w /:

if [ -x /opt/local/bin/bash ]; then
    SHELL=/opt/local/bin/bash
    export SHELL
    exec /opt/local/bin/bash
else
    echo /opt/local/bin/bash not found using default shell of $SHELL
fi

Basta alterar o caminho para o shell que você deseja, em vez de bash.

    
por 08.04.2015 / 22:56
0

Pode ser feito facilmente com chpass :

$ sudo chpass -s /bin/zsh
    
por 11.08.2014 / 11:05