¿Cómo puedo reemplazar bash con Python?

13

Según la respuesta aceptada para esta pregunta SO: Python puede ser un excelente reemplazo de bash .

Mi pregunta, entonces, es esta: ¿cómo hago para hacer un cambio sin interrupciones? Creo que lo principal que debería solucionarse para hacer un cambio de este tipo sería: al iniciar un terminal virtual, llame a un shell de Python (¿qué pasa?), En lugar de algo como el shell Bourne.

¿Tiene sentido? En caso afirmativo, ¿cómo podría hacer eso? Esta comparación de Wikipedia de shells comunes no enumera un solo shell de Python: Comparación de shells de comandos

usuario89
fuente

Respuestas:

15

Ese hilo y su respuesta aceptada en particular son sobre el uso de Python para el script de shell , no como un shell interactivo .

Para escribir guiones en un idioma diferente, coloque, por ejemplo, en #!/usr/bin/env pythonlugar de #!/bin/bashen la parte superior de su guión.

Si desea probar un shell interactivo diferente, simplemente ejecútelo, por ejemplo, escriba ipythonen el indicador de shell existente. Si ha decidido adoptar ese shell, configure la SHELLvariable de entorno al comienzo de su sesión ( ~/.profileen la mayoría de los entornos, o en ~/.pam_environment), por ejemplo export SHELL=/usr/bin/ipython( .profilesintaxis) o SHELL="/usr/bin/ipython"( .pam_environmentsintaxis).

En mi opinión, ninguno de los shells que he visto basados ​​en lenguajes avanzados como Perl o Python son lo suficientemente buenos para uso interactivo. Son demasiado detallados para tareas comunes, especialmente el trabajo común de un shell que consiste en iniciar una aplicación. Yo escribí sobre un tema similar hace 4 años ; No creo que la situación haya mejorado fundamentalmente desde entonces.

Gilles 'SO- deja de ser malvado'
fuente
14

Sé que esta pregunta es bastante antigua ahora, pero hay un nuevo shell basado en un superconjunto de Python 3 llamado xonsh que podría ser lo que estás buscando.

del sitio web:

Xonsh es un lenguaje de shell y un símbolo del sistema con aspecto de Python-ish. El lenguaje es un superconjunto de Python 3.4+ con primitivas de shell adicionales a las que está acostumbrado desde Bash e IPython. Funciona en todos los sistemas principales, incluidos Linux, Mac OSX y Windows. Xonsh está destinado al uso diario de expertos y novatos por igual.

Véalo en xon.sh

Ian Sudbery
fuente
2

Más bien no

La razón es que Python no tiene soporte para lidiar con privilegios elevados. El peor de los casos es con la edición de archivos del sistema.

Comparar

sudo sed -i -e "/\#LXC_DOMAIN/ s/\#//" /etc/default/lxc-net

con:

out = subprocess.run('''sudo sed -i -e "/\#LXC_DOMAIN/ s/\#//" /etc/default/lxc-net''', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT,env={"PATH": "/usr/bin"})

No puede utilizar el manejo de archivos nativos de Python para los archivos del sistema, porque Python es inherentemente incapaz de ejecutar subcomandos con privilegios elevados.

Adam Ryczkowski
fuente
1
No estoy seguro de por qué sudo es peor que cualquier otra cosa. Si necesita sudo, debe ejecutar / usr / bin / sudo, que es un programa como cualquier otro. Su ejemplo particular aquí muestra la dificultad de tomar la mentalidad de shell y usarla desde Python; Una mejor manera podría ser posible, pero sería una traducción menos directa.
rosuav
1

Ipython está bien. Además, mira la biblioteca 'os'.

user400344
fuente
Tienes razón, IPython debería haber sido una elección obvia ... pero ¿cómo hago para que IPython se inicie dentro de un emulador de terminal, o dentro de un terminal real, automáticamente?
user89
El comando: chfn -s $ (que ipython)
user400344
Eso salió confuso ... Solo: chfn -s $ (que ipython) ... Asegúrese de que la ruta completa a ipython esté en / etc / shells.
user400344
otra opción es exec ipythondesde el archivo de inicio de shell actual, como.bashrc
ptman