Qual arquivo de inicialização está sendo usado pelo meu shell?

Qual arquivo de inicialização está sendo usado pelo meu shell?

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 xtracemodo de alguns shells em que o shell exibe no stderr o que fará para cada comando. Para isso basta chamar o shell com a -xopção.

Alguns shells como zshimprimirão os caminhos do arquivo de onde vem o código que está sendo executado por padrão (embora você possa querer definir, PS4por +%x>exemplo, para que o nome do arquivo também seja impresso para o código executado em funções). Para alguns outros como bashou ksh93, você pode imprimi-lo modificando a $PS4variá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 xtraceabordagens 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 bashou

type ${(k)functions} | sed -n 's/.*is a shell function from //p' | sort -u

com zsh.

informação relacionada