Я недавно установил Ubuntu, и когда я запускаю sh в Терминале, мои клавиши со стрелками не работают, поэтому я не могу просматривать историю вызовов или редактировать то, что я печатаю. Это просто выходит как странные персонажи ^[[A
.
Оболочка входа в систему bash, и она работает нормально, но как только я переключаюсь на sh, они не работают.
Как я могу это исправить?
sh
? Конечно, причина, по которой он это делает, не имеет отношения к тому, что это проблематично.Ответы:
/bin/sh
(Тир) оболочка представляет собой POSIX - совместимая, ограниченная функциональность оболочки , чтобы быть более эффективной (меньше) для загрузки системы. Как часть этого, история и расширенное редактирование командной строки не включены. Это больше подходит для строгих сценариев POSIX, чем в качестве интерактивной оболочки. Идея состоит в том, что оболочка 'login' будет по умолчанию bash, но система загрузки будет использовать dash. Страница man в Ubuntu 11.04 показывает, что dash имеет историю и редактирование в командной строке, но программа не имеет этих функций. Посмотрите на размер базовых исполняемых файлов.Попробуйте привыкнуть к бегу
$SHELL
илиbash
вместо простоsh
.источник
В случае , если
/bin/sh
это черточка , он должен быть настроен--with-libedit
перед компиляцией. В противном случае вы все равно можете запуститьset -o vi
в оболочке, но это не делает ничего полезного.источник
sh
не имеет никакой истории По крайней мере, мой не:источник
$FCEDIT
или$HISTFILE
даже простоfc
? Я думал, что те, по крайней мере, были обязательными - и рендеринг$PS1
\!
. Я могу ошибаться в спецификации POSIX - но все они работаютdash
и работают годами.fc
,$FCEDIT
,$HISTFILE
, не$PS1
являются обязательными в POSIX (с пометкой UP для «User портативности»).sh
Систем Unix согласующихся будет иметь те , как UP требуется для Unix соответствия (среди прочего Unix также требует , чтобыecho -e
выходы-e<LF>
). Но если система / оболочка только заявляет о соответствии POSIX, то им не нужно это реализовывать. Для Debianash
это может быть включено во время компиляции с --with-libedit, как уже упоминалось, но Debian по крайней мере не делает.dash
я использую как упакованный для Arch, радикально отличается от того, что я использую Debian. Это ценная информация. Странно, что не вman
.