# Ipython comme login shell

**URL:** <https://www.debian-fr.org/t/ipython-comme-login-shell/79308>\
**Category:** Programmation\
**Tags:** python\
**Created:** [Mai 24, 2019, 11:22 UTC](https://www.debian-fr.org/t/ipython-comme-login-shell/79308 "2019-05-24T11:22:02Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Mai 24, 2019, 11:22 UTC](https://www.debian-fr.org/t/ipython-comme-login-shell/79308/1 "2019-05-24T11:22:03Z")

</div>

Je vais tenter de changer de login shell.

Jusqu’à présent j’utilise (depuis des années) zsh comme login shell. Il est vraiment bien et je le conseille à qui veut utiliser un shell efficace, mais par goût du changement je voudrais voir ce que ça pourrait donner d’utiliser ipython.

L’intérêt d’ipython c’est qu’on a accès à un langage bien plus sympa que le shell (j’aime beaucoup le shell l’a n’est pas la question) avec beaucoup plus de bibliothèques et puis… Ça permet de briller en soirée.

J’ouvre ce fil pour parler de mes avancées en la matière. Mon point d’entrée principal à la documentation est là [https://ipython.org/ipython-doc/3/interactive/shell.html](https://ipython.org/ipython-doc/3/interactive/shell.html)

Pour l’instant je me suis juste choisi un prompt avec comme la conf dans `~/.ipython/profile_default/ipython_config.py`:

```auto
c = get_config()

c.PromptManager.in_template = r'{color.LightGreen}\u@\h{color.LightBlue}[{color.LightCyan}\Y1{color.LightBlue}]{color.Green}|\#> '

```

---

<div class="post-metadata">

**Author:** ![anon44391915](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/958977/32.png) [@anon44391915](https://www.debian-fr.org/u/anon44391915)\
**Post date:** [Mai 24, 2019, 12:08 UTC](https://www.debian-fr.org/t/ipython-comme-login-shell/79308/2 "2019-05-24T12:08:01Z")

</div>

Salut,

Si ça permet d’initier un peu quelque part à Python c’est chouette 🙂

Bon, apparemment, il faut se pencher sérieux dessus quand même.

Aucune raison de faire du bashing ici donc 😉

Bon courage !  
et brille de mille feux

---

<div class="post-metadata">

**Author:** ![Clochette](https://www.debian-fr.org/user_avatar/www.debian-fr.org/clochette/32/8757_2.png) [@Clochette](https://www.debian-fr.org/u/Clochette)\
**Post date:** [Mai 24, 2019, 4:57 UTC](https://www.debian-fr.org/t/ipython-comme-login-shell/79308/3 "2019-05-24T16:57:02Z")

</div>

> [@MisterFreez](#):
>
> je voudrais voir ce que ça pourrait donner d’utiliser ipython.

Je garde le fil de côté, je ne connais pas ce shell.  
J’ai pas aimais fish, ksh et csh me rebute, zsh est bien et puissant mais demande du temps pour en tirer la quintessence , bash est … passe partout, mais si il y a moyen d’avoir un shell python direct je vote oui !!!  
En générale j’ai un env de propre dans un tmux et je passe par du container.

---

<div class="post-metadata">

**Author:** ![littlejohn75](https://www.debian-fr.org/user_avatar/www.debian-fr.org/littlejohn75/32/3840_2.png) [@littlejohn75](https://www.debian-fr.org/u/littlejohn75)\
**Post date:** [Mai 26, 2019, 6:31 UTC](https://www.debian-fr.org/t/ipython-comme-login-shell/79308/4 "2019-05-26T18:31:56Z")

</div>

> [@MisterFreez](#):
>
> je voudrais voir ce que ça pourrait donner d’utiliser ipython.

Je doute qu’utiliser `ipython` comme login shell soit techniquement possible (dans un cas général )

```plaintext
sudo chsh --shell $(which ipython) $USER
ssh localhost id
ssh localhost env | egrep -i 'SHELL|USER|HOME'
ssh localhost 'ls -lAt | head'

```

Autrement dit, à mon avis on ne peut pas utiliser n’importe quel interpréteur de commandes comme **login shell**. Il y a tout un tas de suppositions sur le comportement du shell : gestion des terminaux, des pipelines de commandes, …

Il me semble que sous AIX ou Solaris il y a une liste explicite de login shells possibles (c’était au siècle dernier, je ne me rappelle plus très bien ).

Cordialement,  
Regards,  
Mit freundlichen Grüßen,  
مع تحياتي الخالصة

* * *

F. Petitjean  
Ingénieur civil du Génie Maritime.

Tous les nombres premiers sont impairs, sauf un.  
Tous les nombres premiers sont impairs, sauf deux.

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Mai 26, 2019, 9:04 UTC](https://www.debian-fr.org/t/ipython-comme-login-shell/79308/5 "2019-05-26T21:04:40Z")

</div>

> [@littlejohn75](#):
>
> Autrement dit, à mon avis on ne peut pas utiliser n’importe quel interpréteur de commandes comme **login shell**. Il y a tout un tas de suppositions sur le comportement du shell : gestion des terminaux, des pipelines de commandes, …

Chez moi :

```
% awk -F: '{print $NF}' /etc/passwd | sort -u
/bin/bash
/bin/false
/bin/sh
/bin/sync
/usr/bin/zsh
/usr/sbin/nologin

```

`nologin`, `false` et `sync` ne font rien de tout ce que tu décris.

En effet pour que je m’en serve comme login shell, il faudrait que je m’assure qu’il gère bien les TTY, mais pour le reste ce ne sont que des conventions et je n’en ai pas nécessairement le besoin. Et je ne compte m’en servir qu’en local. Ce qui ne change rien au besoin sauf éventuellement dans certains cas d’usages de ssh, il faut que le shell distant récupère correctement les variables d’environnement qu’on lui passe. En principe ça ne pose pas de problème, une fois qu’on a importé `os` (ce que je vais inclure par défaut), je peux accéder aux variables d’environnement via `os.environ['HOME']`. Il est possible de rendre cela moins verbeux.

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Mai 26, 2019, 9:06 UTC](https://www.debian-fr.org/t/ipython-comme-login-shell/79308/6 "2019-05-26T21:06:44Z")

</div>

> [@Clochette](#):
>
> En générale j’ai un env de propre dans un tmux et je passe par du container.

Le builtin `reset` d’ipython fait aussi un nettoyage de l’environnement (toutes les variables créaient sont détruites), ça peut être utile 🙂

---

<div class="post-metadata">

**Author:** ![littlejohn75](https://www.debian-fr.org/user_avatar/www.debian-fr.org/littlejohn75/32/3840_2.png) [@littlejohn75](https://www.debian-fr.org/u/littlejohn75)\
**Post date:** [Mai 27, 2019, 8:11 UTC](https://www.debian-fr.org/t/ipython-comme-login-shell/79308/7 "2019-05-27T08:11:12Z")

</div>

> [@MisterFreez](#):
>
> `nologin` , `false` et `sync` ne font rien de tout ce que tu décris.

Deux moyens canoniques d’indiquer qu(on ne peut pas se connecter sur certains comptes systèmes, et un compte système particulier `sync` pour les écritures du cache disque. Donc rien à voir avec la notion de shell de connexion.

> [@MisterFreez](#):
>
> ce ne sont que des conventions et je n’en ai pas nécessairement le besoin.

Des conventions peut-être, mais ceci exclut de facto de considérer `ipython` dans son état actuel comme un shell système et donc a fortiori comme un login shell.  
Ce n’est pas pour rien que [les normes POSIX](https://fr.wikipedia.org/wiki/POSIX) existent.  
Naturellement rien ne vous interdit d’utiliser vos systèmes à votre manière.

Bref [C’est vous qui voyez !](https://fr.wikipedia.org/wiki/C%27est_vous_qui_voyez_) et [Y’en a qu’ont essayé, ils ont eu des problèmes !](https://www.youtube.com/watch?v=gNI9a-K1JoU)😂

Cordialement,  
Regards,  
Mit freundlichen Grüßen,  
مع تحياتي الخالصة

* * *

F. Petitjean  
Ingénieur civil du Génie Maritime.

Concierge qui roule, ne s’arrête qu’au bas de l’escalier.  
Les proverbes philosophiques du Professeur Choron
