Como posso sudo su e mudar de diretório logo depois?

13

Eu gostaria de criar um alias que faça algo assim:

alias userYYY='sudo su userYYY; cd /a/path/that/only/userYYY/has/access'

Então, na minha linha de comando, estou logado com um usuário sudo e gostaria de digitar o alias userYYYpara que meu shell agora esteja logado userYYYe pwdesteja /a/path/that/only/userYYY/has/access.

Como eu posso fazer isso? Isso userYYYé para executar alguns processos e deve haver qualquer coisa em sua casa. Por isso, tentei alterar seu $ HOME usando:

sudo usermod -m -d /a/path/that/only/userYYY/has/access userYYY 

E então do meu shell com o meu arquivo sudoer eu fiz sudo su userYYY. Mas isso não funcionou. O único que funcionou foi o sudo su -l userYYYYque abriu uma nova festança dentro do meu shell original ( -bash-4.1$ ....).

Em resumo, o que eu quero é simplesmente evitar ter que escrever 2 linhas no meu shell:

sudo su userYYY
cd /a/path/that/only/userYYY/has/access

Alguma ideia?

Mariano Martinez Peck
fonte

Respostas:

10
alias userYYY='sudo su userYYY -c "cd /a/path/that/only/userYYY/has/access; /bin/bash"'
Cyrus
fonte
parece funcionar bem, mas não sabe ao certo como remover esse erro ou se é um problema. usando ubuntu 14.04LTS, notou que havia um problema com a debian ...bash: cannot set terminal process group (13964): Inappropriate ioctl for device\nbash: no job control in this shell
sonjz
1
na verdade, após usá-lo por um tempo, notei que o terminal é morto com bastante freqüência usando este método (desconexão em torno 15-30 min, regularmente, meu terminal dura cerca de 6 horas antes de desligar)
sonjz
Acabei de desenterrar isso, esse comportamento é devido a uma correção de segurança: unix.stackexchange.com/questions/65843/…
sonjz 25/02/2015
isso me ajudou a editar meu .bashrcarquivo para sudoentão, cdonde ter duas linhas separadas simplesmente não estava funcionando.
RozzA 06/02/19
2

Uma opção seria editar ~/.bashrco usuário de destino e adicionar cdlá:

cd /a/path/that/only/userYYY/has/access
eu pego
fonte
0

Resposta curta - você não pode. O sudo suinicia um novo shell que deve sair antes que ele chegue ao cdcomando.

John
fonte
0

Para mim, uma combinação sudoe screenfuncionou:

sudo -iu vagrant screen -mS npm_install bash -c 'cd /vagrant && npm install'

Este comando muda primeiro para o vagrantusuário. Então, como vagrantaltera o diretório para /vagrante é executado npm install.

czerasz
fonte
0

Sei que isso é um pouco diferente da pergunta original, mas a idéia é executar o comando como um usuário diferente sem digitar uma senha quando a política o proíbe sudo su <user> -c.

sudo -u userYYY -- sh -c "cd /a/path/that/only/userYYY/has/access; /bin/bash"
Chase T.
fonte