Come posso sostituire bash con Python?


13

Secondo la risposta accettata per questa domanda SO:, Python può fare un ottimo sostituto bash .

La mia domanda, quindi, è questa: come posso fare per cambiare senza interruzioni? Penso che la cosa principale da risolvere per fare un tale passaggio sarebbe: quando avvii un terminale virtuale, chiama un po 'di shell Python (che dire?), Piuttosto che qualcosa come la shell Bourne.

Ha senso? Se sì, come potrei farlo? Questo confronto Wikipedia delle shell comuni non elenca una singola shell Python: confronto delle shell dei comandi

Risposte:


15

Quel thread e la sua risposta accettata in particolare riguardano l'uso di Python per gli script di shell , non come una shell interattiva .

Per scrivere script in una lingua diversa, metti ad es. #!/usr/bin/env pythonAnziché #!/bin/bashnella parte superiore dello script.

Se si desidera provare una shell interattiva diversa, basta eseguirla, ad esempio digitare ipythonal prompt della shell esistente. Se hai deciso di adottare quella shell, imposta la SHELLvariabile di ambiente all'inizio della sessione ( ~/.profilenella maggior parte degli ambienti o in ~/.pam_environment), ad esempio export SHELL=/usr/bin/ipython( .profilesintassi) o SHELL="/usr/bin/ipython"( .pam_environmentsintassi).

Nessuna delle shell che ho visto sulla base di linguaggi avanzati come Perl o Python è abbastanza buona per uso interattivo secondo me. Sono troppo dettagliati per le attività comuni, in particolare il lavoro comune di una shell che è quello di avviare un'applicazione. Ho scritto su un argomento simile 4 anni fa ; Non credo che la situazione sia sostanzialmente migliorata da allora.


14

So che questa domanda è piuttosto vecchia ora, ma c'è una nuova shell basata su un superset di Python 3 chiamato xonsh che potrebbe essere quello che stai cercando.

dal sito web:

Xonsh è un linguaggio shell e un prompt dei comandi dall'aspetto BASHwards. Il linguaggio è un superset di Python 3.4+ con primitive di shell aggiuntive a cui sei abituato da Bash e IPython. Funziona su tutti i principali sistemi tra cui Linux, Mac OSX e Windows. Xonsh è pensato per l'uso quotidiano di esperti e principianti.

Guardalo su xon.sh


2

Piuttosto no

Il motivo è che Python non ha supporto per gestire privilegi elevati. Il caso peggiore riguarda la modifica dei file di sistema.

Confrontare

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

Non è possibile utilizzare la gestione dei file nativa di Python per i file di sistema, poiché Python non è intrinsecamente in grado di eseguire sottocomandi con privilegi elevati.


1
Non sono sicuro del perché sudo sia peggio di qualsiasi altra cosa. Se hai bisogno di sudo, devi eseguire / usr / bin / sudo, che è un programma come un altro. Il tuo esempio particolare qui mostra la difficoltà nel prendere la mentalità shell e usarla da Python; un modo migliore potrebbe essere possibile, ma sarebbe una traduzione meno diretta.
Rosuav,

1

Ipython è ok. Inoltre, guarda la libreria "os".


Hai ragione, IPython avrebbe dovuto essere una scelta ovvia ... ma come faccio a far avviare IPython all'interno di un emulatore di terminale o all'interno di un terminale reale, automaticamente?
user89

Il comando: chfn -s $ (quale ipython)
user400344

È uscito confuso ... Solo: chfn -s $ (quale ipython) ... Assicurati che il percorso completo di ipython sia in / etc / shells.
user400344,

un'altra opzione è quella exec ipythondel file di avvio della shell corrente, come.bashrc
ptman
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.