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 xtrace
modo 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 -x
opción.
Algunos shells como este zsh
imprimirán las rutas del archivo de donde proviene el código que se ejecuta de forma predeterminada (aunque es posible que desee configurarlo, PS4
por +%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 bash
o ksh93
, puedes hacer que se imprima modificando la $PS4
variable.
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 xtrace
enfoques 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 bash
o
type ${(k)functions} | sed -n 's/.*is a shell function from //p' | sort -u
con zsh
.