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

1

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?

    
por KawaiKx 26.05.2017 / 02:42

1 resposta

2

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 .

    
por 26.05.2017 / 07:57

Tags