Pourquoi mes touches fléchées ne fonctionnent-elles pas en sh?

16

J'ai récemment installé Ubuntu et lorsque je lance sh sur le terminal, mes touches fléchées ne fonctionnent pas, je ne peux donc pas parcourir l'historique de mes appels ou modifier ce que je tape. Il apparaît simplement comme des personnages étranges ^[[A.

Le shell de connexion est bash et cela fonctionne bien, mais dès que je passe à sh, ils ne fonctionnent pas.

Comment puis-je réparer cela?

Joe
la source
2
pourquoi passez-vous à sh?
oenone
2
@oenone Pourquoi tt importe pourquoi l'OP passe à sh? Il est certain que la raison pour laquelle il le fait est sans rapport avec le fait que c'est problématique.
Agi Hammerthief

Réponses:

15

Le /bin/shshell (tiret) est un shell à fonctionnalité réduite conforme à POSIX pour être plus efficace (plus petit) pour démarrer le système. Dans ce cadre, l'historique et l'édition de ligne de commande avancée ne sont pas inclus. Il est plus approprié pour un script POSIX strict que comme un shell interactif. L'idée est que le shell «login» serait bash par défaut, mais le système de démarrage utiliserait dash. La page de manuel dans Ubuntu 11.04 montre que le tableau de bord a l'historique et l'édition en ligne de commande, mais le programme n'a pas ces fonctionnalités. Jetez un œil à la taille des exécutables de base.

$ ls -l /bin/*ash /bin/sh
-rwxr-xr-x 1 root root 822420 Mar 31 15:26 /bin/bash
-rwxr-xr-x 1 root root  83848 Nov 15  2010 /bin/dash
lrwxrwxrwx 1 root root      4 May 17 21:15 /bin/rbash -> bash
lrwxrwxrwx 1 root root      4 May 17 21:15 /bin/sh -> dash
$ strings /bin/bash | egrep -ci 'fc|hist'
181
$ strings /bin/dash | egrep -ci 'fs|hist'
1

Essayez de vous habituer à courir $SHELLou bashau lieu de simplement sh.

Arcege
la source
8

Dans le cas où Dash/bin/sh est , il doit être configuré avant la compilation. Sinon, vous pouvez toujours exécuter dans le shell, mais cela ne fait rien d'utile.--with-libeditset -o vi


la source
0

shn'a pas d'histoire. Au moins, le mien ne:

server$ sh
\h$ history 
sh: history: not found
\h$ fc
sh: fc: not found
\h$ exit
server$ type sh
sh is hashed (/bin/sh)
server$ ll /bin/sh
lrwxrwxrwx 1 root root 4 Jun  1 18:43 /bin/sh -> dash*
Teddy
la source
1
Vraiment? Selon la spécification IEEE, il le fait: pubs.opengroup.org/onlinepubs/009695399/utilities/sh.html
jasonwryan
@jasonwryan, vous remarquerez que tout ce qui concerne l'historique ou le mode d'édition de ligne est marqué d'un UP dans cette spécification, ce qui signifie qu'il est facultatif (pour la conformité POSIX, pas la conformité Unix).
Stéphane Chazelas
@ StéphaneChazelas - peut-être vrai, mais jasonwryan a définitivement raison quand même. Voici un autre lien . Et d'ailleurs - parlez-vous $FCEDITou $HISTFILEou même juste fc? Je pensais que ceux-ci au moins étaient obligatoires - et le rendu du $PS1 \!. Je peux me tromper sur la spécification POSIX - mais ils fonctionnent dashet fonctionnent tous depuis des années.
mikeserv
1
@mikeserv, pas sûr de ce que vous voulez dire, mais je le répète, tous fc, $FCEDIT, $HISTFILE, $PS1sont facultatifs dans POSIX (marqués UP pour « utilisateur portabilité »). Les shsystèmes conformes à Unix en disposeront car UP est requis pour la conformité Unix (entre autres choses, Unix requiert également ces echo -esorties -e<LF>). Mais si un système / shell revendique uniquement la conformité POSIX, il n'a pas besoin de les implémenter. Pour Debian ash, il peut être activé au moment de la compilation avec --with-libedit comme déjà mentionné, mais pas Debian du moins.
Stéphane Chazelas
@ StéphaneChazelas - merci beaucoup. Le dashfichier que j'utilise comme packagé pour Arch est donc radicalement différent de celui que je prends de Debian. Voilà des informations précieuses. Bizarre, ce n'est pas là man.
mikeserv