Eu estava seguindo as instruções em https://stackoverflow.com/questions/2135644/how-can-i-define-a-bash-alias-as-a-sequence-of-multiple-commands para criar meu próprio script bash. É o seguinte:
sudo -u otheruser -i
alias cd1="cd /dir/one/"
alias cd2="cd /dir/two/"
Eu quero que esses aliases estejam disponíveis para arquivos otheruser
. Meu objetivo é executá-lo como um executável, mas para teste, estou obtendo (para evitar o problema em https://stackoverflow.com/questions/2197461/how-to-set-an-alias-inside-a-bash- shell-script-para-que-é-visível-de-ou ) como source ./myscript
.
Mesmo fazendo isso, o sudo funciona, mas nenhum dos aliases a seguir está disponível (para otheruser
). Você acha que os aliases estão sendo aplicados ao usuário que invocou este comando e não ao novo usuário? Ou existe alguma regra de que os comandos em um script são ignorados após sudo'ing para outro usuário?
Acho que o motivo de não funcionar é que os dois
alias
comandos são executados após o términobash
da sessão iniciadasudo
. Você poderia fazer um teste - fonte do script, quando a nova sessão começar, pressione Ctrl- dpara deixá-lo e, em seguida, no tipo de shell original:Posso conseguir o que você deseja com
expect
script, mas não sou especialista nisso, então críticas são bem-vindas:Certifique-se de que você realmente
expect
instalou antes de executar este script.Você pode instalar
expect
etcl
(o que é necessário) usando o gerenciador de pacotes do seu sistema. Se precisar instalá-lo manualmente, consulte as instruções do Expect em http://expect.sourceforge.net/ . Os arquivos README/INSTALL para Expect indicam alguns locais para obter o Tcl, mas estes parecem desatualizados. No entanto, você pode obter uma cópia do Tcl do ActiveState.