¿Qué archivo de inicio utiliza mi shell?

¿Qué archivo de inicio utiliza mi shell?

Hay varios archivos de inicio en mi instalación de Ubuntu en el motor informático de Google.

¿Existe algún comando que me indique qué archivo de inicio está utilizando el shell que estoy usando actualmente?

Respuesta1

La lista de archivos que los shells suelen leer al iniciar se limita a unos pocos. Pero éstos, a su vez, puedenfuenteotros, y eso puede terminar siendo un gran número, como cuando se cargan sistemas de terminación complejos.

Un enfoque es ejecutar su shell con:

strace -e open your-shell

(o el comando equivalente en su sistema como truss// tusc... dtruss)

Eso enumerará todos los archivos que abre el shell. Eso también enumeraría los archivos que abre y que no son archivos de inicio, y los archivos que intenta abrir pero no logra abrir.

Otro enfoque podría ser utilizar el xtracemodo de algunos shells donde el shell genera en stderr lo que va a hacer para cada comando. Para eso, simplemente llama al shell con la -xopción.

Algunos shells como este zshimprimirán las rutas del archivo de donde proviene el código que se ejecuta de forma predeterminada (aunque es posible que desee configurarlo, PS4por +%x>ejemplo, para que el nombre del archivo también se imprima para la ejecución del código en funciones). Para algunos otros como basho ksh93, puedes hacer que se imprima modificando la $PS4variable.

PS4='+$BASH_SOURCE> ' bash -x
PS4='+${sh.file}> ' ksh93 -x
PS4='+%x> ' zsh -x

Con bash, puede posprocesar la salida para conservar solo rutas únicas de los archivos con algo como:

PS4=' <:>$BASH_SOURCE<:>' BASH_XTRACEFD=3 3> >(
  awk -F'<:>' 'NF>2 && !seen[$2]++ {print $2}') bash -x

(suponiendo que las rutas de los archivos de inicio no contengan nuevas líneas o <:>que no se esté ejecutando ningún comando de varias líneas en los archivos de inicio que contienen <:>)

Esos xtraceenfoques basados ​​en - no enumerarán archivos de inicio que estén vacíos o que consistan solo en comentarios o definiciones de funciones (a menos que esas funciones se ejecuten más adelante), ni archivos de inicio que el shell procesaría si estuvieran allí.

Sin embargo, puede recuperar los archivos a partir de los cuales se han definido funciones con

eval "(shopt -s extdebug; declare() { typeset -F \"\$2\"; }
  $(typeset -F))" | cut -d ' ' -f 3- | sort -u

Con basho

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

con zsh.

información relacionada