Comment puis-je remplacer bash par Python?

13

Selon la réponse acceptée pour cette question SO:, Python peut faire un excellent remplacement bash .

Ma question est alors la suivante: comment procéder pour effectuer un changement sans couture? Je pense que la principale chose à régler pour effectuer un tel changement serait: lors du démarrage d'un terminal virtuel, appeler un shell Python (quoi?), Plutôt que quelque chose comme le shell Bourne.

Cela a-t-il du sens? Si oui, comment pourrais-je m'y prendre? Cette comparaison Wikipedia des shells communs ne répertorie pas un seul shell Python: Comparaison des shells de commande

user89
la source

Réponses:

15

Ce thread et sa réponse acceptée en particulier concernent l'utilisation de Python pour l' écriture de scripts shell , et non comme un shell interactif .

Pour écrire des scripts dans une langue différente, mettez par exemple #!/usr/bin/env pythonau lieu de #!/bin/bashen haut de votre script.

Si vous voulez essayer un autre shell interactif, lancez-le simplement, par exemple tapez ipythonà l'invite de votre shell existant. Si vous avez décidé d'adopter ce shell, définissez la SHELLvariable d'environnement au début de votre session ( ~/.profiledans la plupart des environnements, ou dans ~/.pam_environment), par exemple export SHELL=/usr/bin/ipython( .profilesyntaxe) ou SHELL="/usr/bin/ipython"( .pam_environmentsyntaxe).

À mon avis, aucun des shells que j'ai vus basés sur des langages avancés tels que Perl ou Python n'est assez bon pour une utilisation interactive. Ils sont trop verbeux pour les tâches courantes, en particulier le travail commun d'un shell qui consiste à lancer une application. J'ai écrit sur un sujet similaire il y a 4 ans ; Je ne pense pas que la situation se soit fondamentalement améliorée depuis lors.

Gilles 'SO- arrête d'être méchant'
la source
14

Je sais que cette question est assez ancienne maintenant, mais il existe un nouveau shell basé sur un sur-ensemble de Python 3 appelé xonsh qui pourrait être ce que vous recherchez.

sur le site:

Xonsh est un langage shell et une invite de commande ressemblant à Python, BASHwards. Le langage est un sur-ensemble de Python 3.4+ avec des primitives shell supplémentaires auxquelles vous êtes habitué depuis Bash et IPython. Il fonctionne sur tous les principaux systèmes, y compris Linux, Mac OSX et Windows. Xonsh est destiné à l'usage quotidien des experts et des novices.

Voir sur xon.sh

Ian Sudbery
la source
2

Plutôt pas

La raison en est que Python ne prend pas en charge le traitement des privilèges élevés. Le pire des cas est la modification des fichiers système.

Comparer

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

avec:

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"})

Vous ne pouvez pas utiliser la gestion de fichiers native de Python pour les fichiers système, car Python est intrinsèquement incapable d'exécuter des sous-commandes avec des privilèges élevés.

Adam Ryczkowski
la source
1
Je ne sais pas pourquoi sudo est pire qu'autre chose. Si vous avez besoin de sudo, vous devez exécuter / usr / bin / sudo, qui est un programme comme les autres. Votre exemple particulier ici montre la difficulté à prendre la mentalité shell et à l'utiliser à partir de Python; une meilleure façon pourrait être possible, mais ce serait une traduction moins directe.
rosuav
1

Ipython est ok. Regardez également la bibliothèque 'os'.

user400344
la source
Vous avez raison, IPython aurait dû être un choix évident ... mais comment faire pour que IPython démarre automatiquement à l'intérieur d'un émulateur de terminal, ou à l'intérieur d'un terminal réel?
user89
La commande: chfn -s $ (quel ipython)
user400344
Cela est devenu confus ... Juste: chfn -s $ (quel ipython) ... Assurez-vous que le chemin complet vers ipython est dans / etc / shells.
user400344
une autre option consiste à exec ipythonpartir du fichier de démarrage du shell actuel, comme.bashrc
ptman