A lista de arquivos normalmente lidos na inicialização é limitada a apenas alguns. Mas esses, por sua vez, podem fornecer outros, e isso pode acabar sendo um grande número, como quando sistemas de completação complexos são carregados.
Uma abordagem é executar seu shell com:
strace -e open your-shell
(ou o comando equivalente no 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 arquivos que ele tenta, mas não consegue abrir.
Outra abordagem poderia ser usar o modo xtrace
de alguns shells em que o shell gera no stderr o que ele fará para cada comando. Para isso, basta chamar o shell com a opção -x
.
Alguns shells como zsh
imprimirão os caminhos do arquivo de onde o código sendo executado vem por padrão (embora você possa querer definir PS4
to +%x>
, por exemplo, para o nome do arquivo também ser impresso para executar código em funções). Para alguns outros, como bash
ou ksh93
, você pode fazer com que seja impresso modificando a variável $PS4
.
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 únicos 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 <:>
e que não haja nenhum comando multilinha sendo executado nesses arquivos de inicialização que contenham <:>
)
Essas abordagens baseadas em xtrace
não listarão arquivos de inicialização que estejam vazios ou consistam apenas em comentários ou definições de funções (a menos que essas funções estejam sendo executadas posteriormente), nem em arquivos de inicialização que o shell processe se eles estivessem lá.
Você pode, no entanto, recuperar os arquivos cujas funções foram definidas com
eval "(shopt -s extdebug; declare() { typeset -F \"\\"; }
$(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
.