Warum funktionieren meine Pfeiltasten nicht in sh?

16

Ich habe vor kurzem Ubuntu installiert und wenn ich sh auf dem Terminal laufen lasse, funktionieren meine Pfeiltasten nicht, so dass ich meinen Anrufverlauf nicht durchgehen oder bearbeiten kann, was auch immer ich tippe. Es kommt einfach so komisch raus wie Charaktere ^[[A.

Die Login-Shell ist bash und funktioniert einwandfrei, aber sobald ich zu sh wechsle, funktionieren sie nicht mehr.

Wie kann ich das beheben?

Joe
quelle
2
warum wechselst du zu sh?
Oenone
2
@oenone Warum spielt es keine Rolle, warum das OP auf umschaltet sh? Der Grund, warum er das tut, ist sicherlich unerheblich für die Tatsache, dass es problematisch ist.
Agi Hammerthief

Antworten:

15

Die /bin/sh(Bindestrich-) Shell ist eine POSIX-kompatible Shell mit reduzierter Funktionalität, um das System effizienter (kleiner) zu booten. In diesem Zusammenhang sind der Verlauf und die erweiterte Befehlszeilenbearbeitung nicht enthalten. Es eignet sich eher für strenges POSIX-Scripting als für eine interaktive Shell. Die Idee ist, dass die 'Login'-Shell standardmäßig bash ist, das Boot-System jedoch dash verwendet. Die Manpage in Ubuntu 11.04 zeigt, dass Dash über Verlaufs- und Befehlszeilenbearbeitung verfügt, das Programm jedoch nicht über diese Funktionen verfügt. Schauen Sie sich die Größe der ausführbaren Basisdateien an.

$ 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

Versuchen Sie, sich an das Laufen zu gewöhnen $SHELLoder bashnicht nur sh.

Arcege
quelle
8

Im Fall /bin/shist Dash , muss es konfiguriert werden --with-libeditvor der Kompilierung. Andernfalls können Sie set -o vidie Shell weiterhin ausführen, ohne dass dies von Nutzen ist.


quelle
0

shhat keine Geschichte. Zumindest meine nicht:

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
quelle
1
"Ja wirklich?" Gemäß der IEEE-Spezifikation gilt Folgendes
jasonwryan
@jasonwryan, Sie werden feststellen, dass alles, was mit dem Verlauf oder dem Zeilenbearbeitungsmodus zu tun hat, in dieser Spezifikation mit einem UP gekennzeichnet ist , was bedeutet, dass es optional ist (für POSIX-Konformität, nicht für Unix-Konformität).
Stéphane Chazelas
@Stéphanechazelas - vielleicht stimmt das, aber jasonwryan ist auf jeden fall richtig. Hier ist ein weiterer Link . Und außerdem - sind Sie auf $FCEDIToder $HISTFILEoder auch nur fc? Ich dachte, das wäre zumindest obligatorisch - und das Rendern der $PS1 \!. Ich könnte mich in Bezug auf die POSIX-Spezifikation irren - aber sie funktionieren dashund funktionieren seit Jahren.
mikeserv
1
@mikeserv, nicht sicher , was du meinst, aber zu reite, alle fc, $FCEDIT, $HISTFILE, $PS1sind optional in POSIX (markiert mit UP für „User Portabilität“). Die shvon Unix-konformen Systeme werden solche haben, wie UP für die Unix-Konformität benötigt wird (unter anderem benötigt Unix auch diese echo -eAusgaben -e<LF>). Wenn ein System / eine Shell jedoch nur POSIX-Konformität beansprucht, muss es diese nicht implementieren. Für Debian ashkann es, wie bereits erwähnt, zur Kompilierungszeit mit --with-libedit aktiviert werden, für Debian zumindest nicht.
Stéphane Chazelas
@ StéphaneChazelas - vielen Dank. Das, was dashich als Paket für Arch verwende, unterscheidet sich daher drastisch von dem, was ich von Debian nehme. Das sind wertvolle Informationen. Komisch, dass das nicht drin ist man.
mikeserv