Saltar al contenido

Python ‘source HOME / .bashrc’ con os.system ()

Solución:

Lo que quieres no es posible. Un programa (su script) no puede modificar el entorno de la persona que llama (el shell desde el que lo ejecuta).

Otro enfoque que le permitiría hacer algo parecido es escribirlo en términos de una función bash, que se ejecuta en el mismo proceso y puede modificar la persona que llama. Tenga en cuenta que el aprovisionamiento durante el tiempo de ejecución puede tener posibles efectos secundarios negativos según lo que el usuario tenga en su base de datos.

lo que intentas hacer es imposible. o mejor: cómo estás tratando de hacerlo es imposible.

  1. tu comando bash es incorrecto. bash -s command no ejecuta command. solo almacena la cadena “comando” en la variable $1 y luego lo lleva al indicador. es por eso que la secuencia de comandos de Python parece congelarse. lo que pretendías hacer es bash -c command.

  2. ¿Por qué buscas? .bashrc? ¿No sería suficiente solo buscar .bash_aliases?

  3. incluso si obtuvo su comando bash correctamente, los cambios solo tendrán efecto en la sesión de bash iniciada desde python. Una vez que se cierra la sesión de bash y se completa el script de Python, vuelve a su sesión de bash original. todos los cambios en la sesión de bash iniciada desde python se pierden.

cada vez que desee cambiar algo en la sesión de bash actual, debe hacerlo desde dentro de la sesión de bash actual. la mayoría de los comandos que ejecuta desde bash (comandos del sistema, scripts de python, incluso scripts de bash) generarán otro proceso, y todo lo que haga en ese otro proceso no afectará su primera sesión de bash.

source es una función integrada de bash que le permite ejecutar comandos dentro de la sesión bash que se está ejecutando actualmente, en lugar de generar otro proceso y ejecutar los comandos allí. definir una función bash es otra forma de ejecutar comandos dentro de la sesión bash que se está ejecutando actualmente.

consulte esta respuesta para obtener más información sobre el abastecimiento y la ejecución.

lo que puedes hacer para lograr lo que quieres

modifique su secuencia de comandos de Python para hacer los cambios necesarios para .bash_aliases.

prepare un script bash para ejecutar su script python y luego fuente .bash_aliases.

#i am a bash script, but you have to source me, do not execute me.
modify_bash_aliases.py "[email protected]"
source ~/.bash_aliases

agrega un alias a tu .bashrc para obtener ese guión

alias add_alias="source modify_bash_aliases.sh"

ahora cuando escribes add_alias some_alias en su indicador de bash será reemplazado por source modify_bash_aliases.sh y luego ejecutado. ya que source es un bash incorporado, los comandos dentro del script se ejecutarán dentro de la sesión bash que se esté ejecutando actualmente. el script de Python aún se ejecutará en otro proceso, pero el siguiente source El comando se ejecutará dentro de la sesión bash que se esté ejecutando actualmente.

de otra manera

modifique su secuencia de comandos de Python para hacer los cambios necesarios para .bash_aliases.

prepare una función bash para ejecutar su script de Python y luego fuente .bash_aliases.

add_alias() {
  modify_bash_aliases.py "[email protected]"
  source ~/.bash_aliases      
}

ahora puedes llamar a la función así: add_alias some_alias

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *