Perché i miei tasti freccia non funzionano in sh?


16

Di recente ho installato Ubuntu e quando eseguo sh sul Terminale i miei tasti freccia non funzionano, quindi non riesco a consultare la cronologia delle chiamate o modificare qualunque cosa stia digitando. Viene fuori come personaggi strani come ^[[A.

La shell di accesso è bash e funziona bene ma non appena passo a sh, non funzionano.

Come posso risolvere questo problema?


2
perché passi a sh?
oenone,

2
@oenone Perché non importa perché l'OP passa a sh? Sicuramente il motivo per cui lo fa è irrilevante per il fatto che è problematico.
Agi Hammerthief

Risposte:


15

La /bin/shshell (trattino) è una shell compatibile con POSIX, a funzionalità ridotta per essere più efficiente (più piccola) per l'avvio del sistema. Inoltre, la cronologia e la modifica avanzata della riga di comando non sono incluse. È più appropriato per gli script POSIX rigorosi che come shell interattiva. L'idea è che la shell 'login' sarebbe bash per impostazione predefinita, ma il sistema di avvio userebbe dash. La pagina man di Ubuntu 11.04 mostra che dash ha cronologia e modifica della riga di comando, ma il programma non ha queste funzionalità. Dai un'occhiata alle dimensioni degli eseguibili di 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

Prova ad abituarti alla corsa $SHELLo al bashposto del semplice sh.


8

Nel caso in cui /bin/shsia Dash , deve essere configurato --with-libeditprima della compilazione. Altrimenti puoi ancora eseguire set -o vinella shell ma non fa nulla di utile.


0

shnon ha storia. Almeno il mio non:

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*

1

@jasonwryan, noterai che qualsiasi cosa relativa alla cronologia o alla modalità di modifica delle linee è contrassegnata da un UP in quella specifica, il che significa che è facoltativo (per conformità POSIX, non conformità Unix).
Stéphane Chazelas,

@ StéphaneChazelas - forse vero, ma jasonwryan è sicuramente corretto comunque. Ecco un altro link . E poi - ti riferisci $FCEDITo $HISTFILEo anche solo fc? Pensavo che quelli almeno fossero obbligatori - e il rendering di $PS1 \!. Potrei sbagliarmi sulle specifiche POSIX, ma tutte funzionano dashe lo fanno da anni.
Mikeserv,

1
@mikeserv, non so cosa vuoi dire, ma per ribadire, tutti fc, $FCEDIT, $HISTFILE, $PS1sono facoltativi a POSIX (contrassegnati con UP per "User portabilità"). I shsistemi conformi a Unix avranno quelli come UP è richiesto per la conformità Unix (tra le altre cose anche Unix richiede tali echo -eoutput -e<LF>). Ma se un sistema / shell rivendica solo la conformità POSIX, non è necessario implementarli. Per Debian ash, può essere abilitato in fase di compilazione con --with-libedit come già accennato, ma Debian almeno non lo fa.
Stéphane Chazelas,

@ StéphaneChazelas - grazie mille. L' dashutilizzo come pacchetto per Arch è quindi drasticamente diverso da quello che Debian lo prendo. Sono informazioni preziose. Strano che non c'è man.
Mikeserv,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.