Os aliases não são expandidos quando o shell não é interativo, a menos que a opção expand_aliases
shell esteja definida com shopt -s expand_aliases
.
Os aliases são uma ferramenta de atalho para uso interativo. Para qualquer tipo de script, use uma função de shell:
startservices () {
# commands go here
}
As funções do shell são muito mais flexíveis do que os aliases de várias maneiras. Eles são capazes de aceitar argumentos como um script de shell, para iniciantes:
startservices () {
user="$1"
service="$2"
# code to start service "$service" as user "$user"
}
Você não precisa fornecer o .bash_profile
do outro usuário explicitamente. Use sudo -i
em vez disso. Isso iniciará um shell de login, que lerá .bash_profile
ao iniciar:
$ sudo -i -u User2 startservices
Isso requer que startservices
seja um script ou outro utilitário externo no $PATH
de User2
, uma função shell definida nos arquivos de inicialização do shell de User2
ou um alias (com o shell sendo executado com expand_aliases
set) definido nos arquivos de inicialização do shell de User2
.
Veja também Há sempre um bom razão para executar o sudo su?