Existem vários arquivos de inicialização na minha instalação do Ubuntu no mecanismo de computação do Google.
Existe algum comando que me diga qual arquivo de inicialização está sendo usado pelo shell que estou usando atualmente?
Responder1
A lista de arquivos que os shells normalmente lêem na inicialização é limitada a apenas alguns. Mas estes, por sua vez, podemfonteoutros, e isso pode acabar sendo um grande número, como quando sistemas complexos de completação são carregados.
Uma abordagem é executar seu shell com:
strace -e open your-shell
(ou o comando equivalente em seu sistema como truss
/ tusc
/ dtruss
...)
Isso listará todos os arquivos que o shell abre. Isso também listaria os arquivos que ele abre e que não são arquivos de inicialização, e os arquivos que ele tenta, mas não consegue abrir.
Outra abordagem poderia ser usar o xtrace
modo de alguns shells em que o shell exibe no stderr o que fará para cada comando. Para isso basta chamar o shell com a -x
opção.
Alguns shells como zsh
imprimirão os caminhos do arquivo de onde vem o código que está sendo executado por padrão (embora você possa querer definir, PS4
por +%x>
exemplo, para que o nome do arquivo também seja impresso para o código executado em funções). Para alguns outros como bash
ou ksh93
, você pode imprimi-lo modificando a $PS4
variável.
PS4='+$BASH_SOURCE> ' bash -x
PS4='+${sh.file}> ' ksh93 -x
PS4='+%x> ' zsh -x
Com bash
, você pode pós-processar a saída para reter apenas caminhos exclusivos dos arquivos com algo como:
PS4=' <:>$BASH_SOURCE<:>' BASH_XTRACEFD=3 3> >(
awk -F'<:>' 'NF>2 && !seen[$2]++ {print $2}') bash -x
(supondo que os caminhos dos arquivos de inicialização não contenham novas linhas ou <:>
que não haja nenhum comando multilinha sendo executado nos arquivos de inicialização que contêm <:>
)
Essas xtrace
abordagens baseadas em - não listarão arquivos de inicialização vazios ou consistirão apenas em comentários ou definições de funções (a menos que essas funções sejam executadas posteriormente), nem arquivos de inicialização que o shell processaria se estivessem lá.
No entanto, você pode recuperar os arquivos dos quais as funções foram definidas com
eval "(shopt -s extdebug; declare() { typeset -F \"\$2\"; }
$(typeset -F))" | cut -d ' ' -f 3- | sort -u
com bash
ou
type ${(k)functions} | sed -n 's/.*is a shell function from //p' | sort -u
com zsh
.