Dlaczego moje klawisze strzałek nie działają w sh?

16

Niedawno zainstalowałem Ubuntu i kiedy uruchamiam sh na Terminalu, moje klawisze strzałek nie działają, więc nie mogę przeglądać historii połączeń ani edytować tego, co wpisuję. Po prostu wychodzi jak dziwne postacie ^[[A.

Powłoka logowania jest bash i działa dobrze, ale jak tylko przejdę do sh, nie działają.

Jak mogę to naprawić?

Joe
źródło
2
dlaczego zmieniasz na sh?
oenone
2
@oenone Dlaczego nie ma znaczenia, dlaczego przełącza się OP sh? Z pewnością powód, dla którego to robi, jest nieistotny dla faktu, że jest problematyczny.
Agi Hammerthief

Odpowiedzi:

15

/bin/sh(Łącznik) otoczka jest zgodny POSIX zmniejszona powłoki funkcjonalność być bardziej wydajne (mniejsza) do uruchamiania systemu. W związku z tym historia i zaawansowana edycja wiersza poleceń nie są uwzględnione. Jest bardziej odpowiedni dla ścisłego skryptu POSIX niż jako interaktywna powłoka. Chodzi o to, że powłoka „login” byłaby domyślnie bash, ale system rozruchowy używałby myślnika. Strona podręcznika w Ubuntu 11.04 pokazuje, że dash ma historię i edycję wiersza poleceń, ale program nie ma tych funkcji. Spójrz na rozmiar podstawowych plików wykonywalnych.

$ 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

Spróbuj przyzwyczaić się do biegania $SHELLlub bashzamiast tego sh.

Arcege
źródło
8

W przypadku, /bin/shjest Dash , to musi być skonfigurowany --with-libeditprzed kompilacją. W przeciwnym razie możesz nadal działać set -o viw powłoce, ale to nie robi nic pożytecznego.


źródło
0

shnie ma żadnej historii. Przynajmniej mój nie:

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*
Miś
źródło
1
Naprawdę? Zgodnie ze specyfikacją IEEE robi to: pubs.opengroup.org/onlinepubs/009695399/utilities/sh.html
jasonwryan
@ jasonwryan, zauważysz, że wszystko, co jest związane z historią lub trybem edycji linii, jest oznaczone UP w tej specyfikacji, co oznacza, że ​​jest opcjonalne (w przypadku zgodności z POSIX, a nie zgodności z Uniksem).
Stéphane Chazelas
@ StéphaneChazelas - może prawda, ale jasonwryan i tak jest zdecydowanie poprawny. Oto kolejny link . A poza tym - to dotyczy $FCEDITlub $HISTFILEnawet po prostu fc? Myślałem, że przynajmniej są obowiązkowe - i renderowanie $PS1 \!. Mogę się mylić co do specyfikacji POSIX - ale wszystkie one działają dashi działają od lat.
mikeserv
1
@mikeserv, nie wiem co masz na myśli, ale powtórzyć, wszystko fc,$FCEDIT , $HISTFILE, $PS1są opcjonalne w POSIX (oznaczonego UP dla „User przenoszenia”). shSystemów Unix zgodnymi będą miały te jako UP jest wymagana dla Unix zgodności (między innymi Unix wymaga również, aby echo -ewyjść -e<LF>). Ale jeśli system / powłoka deklaruje tylko zgodność z POSIX, to nie musi ich implementować. W przypadku Debiana ashmożna go włączyć w czasie kompilacji z opcją --with-libedit, jak już wspomniano, ale przynajmniej Debian tego nie robi.
Stéphane Chazelas,
@ StéphaneChazelas - wielkie dzięki. Dlatego dashużywam w pakiecie dla Archa, dlatego drastycznie różni się od tego, w którym biorę Debiana. To cenna informacja. Dziwne, że nie ma man.
mikeserv