$ finger $USER|grep -oP 'Shell: \K.*'
/bin/mksh
Eu queria saber se há uma maneira de descobrir o shell padrão do usuário atual dentro de um script de shell?
Caso de uso: Estou trabalhando em um script que define um alias para um comando e esse alias é definido dentro de um script de shell.
!# /bin/bash
alias = 'some command to set the alias'
Existe uma lógica no script em que ele tenta encontrar o shell padrão do usuário que executa o script e adiciona esse alias no respectivo arquivo ~ / .bashrc ou ~ / .zshrc
Mas como estou adicionando um shebang na frente do script e explicitamente pedindo para usar o bash, as respostas postadas aqui sempre retorna o bash como esperado, embora eu esteja executando este script em um terminal ZSH.
Existe uma maneira de obter o tipo de shell onde o script é executado, independentemente do conjunto de shebang?
Estou procurando uma solução que funcione tanto no Mac quanto em todo o bistrô baseado em Linux.
A variável de ambiente, SHELL
sempre se expande para o shell de login padrão do usuário solicitante (obtém o valor de /etc/passwd
).
Para qualquer outro usuário, você precisa fazer algum processamento com /etc/passwd
, aqui está um simples awk
snippet:
awk -F: -v user="foobar" '$1 == user {print $NF}' /etc/passwd
Substitua foobar
pelo nome de usuário real.
Se você tiver ldap
(ou algo semelhante no lugar), use getent
para obter o banco de dados em vez de analisar diretamente /etc/passwd
:
getent passwd | awk -F: -v user="foobar" '$1 == user {print $NF}'
ou abordagem mais limpa, deixe getent
fazer a análise (graças a @Kusalananda):
getent passwd foobar | awk -F: '{print $NF}'
Como getent
não é um comando padrão no MacOS, convém usar uma chamada getpwuid
de nível inferior que consultará os serviços de nomeação para os quais a máquina está configurada. Isso pode exigir a chamada para perl
ou python
, que são bastante comuns na maioria das plataformas semelhantes a Unix
por exemplo, isso retornará o shell para o usuário atual:
perl -e '@x=getpwuid($<); print $x[8]'
Você pode obter o shell padrão do usuário no ambiente da seguinte forma:
echo $SHELL
Mas não assim:
echo $0
O último apenas informará qual shell seu script está usando atualmente. Então você quer a primeira opção acima.
Curto e indolor:
getent passwd <USER> | cut -d : -f 7
Talvez isso:
grep $USER </etc/passwd | cut -f 7 -d ":"
Tags configuration shell