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?
sh
? Der Grund, warum er das tut, ist sicherlich unerheblich für die Tatsache, dass es problematisch ist.Antworten:
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.Versuchen Sie, sich an das Laufen zu gewöhnen
$SHELL
oderbash
nicht nursh
.quelle
Im Fall
/bin/sh
ist Dash , muss es konfiguriert werden--with-libedit
vor der Kompilierung. Andernfalls können Sieset -o vi
die Shell weiterhin ausführen, ohne dass dies von Nutzen ist.quelle
sh
hat keine Geschichte. Zumindest meine nicht:quelle
$FCEDIT
oder$HISTFILE
oder auch nurfc
? 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 funktionierendash
und funktionieren seit Jahren.fc
,$FCEDIT
,$HISTFILE
,$PS1
sind optional in POSIX (markiert mit UP für „User Portabilität“). Diesh
von Unix-konformen Systeme werden solche haben, wie UP für die Unix-Konformität benötigt wird (unter anderem benötigt Unix auch dieseecho -e
Ausgaben-e<LF>
). Wenn ein System / eine Shell jedoch nur POSIX-Konformität beansprucht, muss es diese nicht implementieren. Für Debianash
kann es, wie bereits erwähnt, zur Kompilierungszeit mit --with-libedit aktiviert werden, für Debian zumindest nicht.dash
ich 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 istman
.