¿Cómo puedo hacer que el software instalado localmente se obtenga automáticamente cuando inicio sesión en mi cuenta?

¿Cómo puedo hacer que el software instalado localmente se obtenga automáticamente cuando inicio sesión en mi cuenta?

He creado e instalado un nuevo software manualmente (desde un repositorio git remoto). Cada vez que quiero usarlo, ejecuto algo como,

. /path/to/setup_software.sh

pero me gustaría que eso suceda automáticamente cada vez que inicie sesión en mi cuenta, en lugar de hacerlo manualmente. Intenté poner el comando anterior dentro de mi .bashrcarchivo, de modo que el archivo de instalación se obtenga cada vez que abro mi kernel. Todo funciona bien después de eso y estoy feliz. Mi único problema menor (realmente menor) es que imprime algunos mensajes de registro justo después de abrir el kernel y todo el proceso de abastecimiento lleva algo de tiempo (lo cual no me gusta: D). De todos modos, supongo que existe una solución más sencilla, tal vez moviendo mi carpeta de instalación a algún lugar que ejecute el archivo de instalación automáticamente; cualquier ayuda sería muy apreciada.

Respuesta1

Colocar el comando source(o .) en un archivo de inicio distinto .bashrcno ayudará al tiempo de ejecución. Puedes colocar el inicio /etc/profile.dpero el retraso será el mismo. En cuanto a los mensajes de registro, intente esto en.bashrc

. /path/to/setup_software.sh >/dev/null 2>&1

No verá los mensajes de registro. Tampoco verá ningún error que surja.

Respuesta2

Sólo querrás ponerlo en ~/.bash_profile, ya que eso es lo que ejecuta tu shell al iniciar sesión; Problema: si no estás iniciando sesión en un shell (por ejemplo, porque inicias sesión usando una interfaz gráfica), entonces no se ejecutará.

observación: esta es una de tres respuestas separadas; se pretende la separación.

Respuesta3

Si sabes que tu script sólo establece cosas que sonambos

  1. variables de entorno, y no nuevas funciones de shell,
  2. nunca cambie (por ejemplo, no dependa de la hora, la fecha o el número de versión de algo que pueda actualizar),

entonces puedes simplemente "emular" lo que hace el script: establecerá algunas variables de entorno.

Entonces, ¿cómo comparar cuáles son las variables de entorno antes y después de ejecutar el script? diffEs realmente bueno comparando archivos de texto.

Puede utilizar setpara obtener las variables de entorno (después de configurar la opción posix.

Y puede usarlo <(...)para crear un archivo temporal para contener el resultado de setla ejecución en un subshell. Entonces, junta todo eso:

$ diff <(set -o posix; set) <(export FOO=BAR; set -o posix; set)

Te contaré

33a34
> FOO=BAR

que se leería como "hay una línea FOO=BARque está en la segunda salida, no en la primera".

Tu puedes correr

$ diff <(set -o posix; set) <(. /path/to/setup_software.sh; set -o posix; set)

para descubrir qué cambió su script de configuración en el entorno. Necesitará un cerebro humano para interpretar eso: algunas cosas serán simplemente irrelevantes, otras serán lo que el script realmente haga en su sistema y tendrá influencia.

Luego puede agregar todas las variables modificadas en su archivo ~/.bashrc, por ejemplo

export FOO=BAR

observación: esta es una de tres respuestas separadas; se pretende la separación.

Respuesta4

¡Esto suena peligrosamente como si estuvieras intentando demasiado! Podría simplemente agregar un alias que genere el script y luego inicie su software:

alias startit=". /path/to/setup_software.sh; run_software"

y luego llamar startit.

Si se trata de más de un solo comando, es posible que esté buscando algo como entornos de activación automática cuando ingresa a cdcarpetas específicas.

direnvte permite hacer prácticamente eso. Por supuesto, no resuelve el problema de que obtener el script lleva tiempo, pero solo lo hace una vez cuando ingresa a un directorio específico, y no después para el mismo shell.

observación: esta es una de tres respuestas separadas; se pretende la separación.

información relacionada