Чому мої клавіші зі стрілками не працюють у ш?


16

Нещодавно я встановив Ubuntu, і коли я запускаю sh на терміналі, клавіші зі стрілками не працюють, тому я не можу переглядати історію дзвінків або редагувати все, що я набираю. Це просто виходить так, як подобаються дивні персонажі ^[[A.

Оболонка для входу є bash, і вона працює чудово, але як тільки я переключаюся на sh, вони не працюють.

Як я можу це виправити?


2
чому ви переходите на ш?
онон

2
@oenone Чому tt не має значення, чому OP переходить на sh? Безумовно, причина, чому він це робить, не має значення для того, що це проблематично.
Agi Hammerthief

Відповіді:


15

/bin/sh(Тир) оболонка являє собою POSIX - сумісна, обмеженою функціональністю оболонки , щоб бути більш ефективною (менше) для завантаження системи. Як частина цього, історія та розширене редагування командного рядка не включені. Він більше підходить для строгого сценарію POSIX, ніж як інтерактивна оболонка. Ідея полягає в тому, що оболонка 'login' за замовчуванням буде bash, але система завантаження використовує тире. Сторінка man в Ubuntu 11.04 показує, що dash має історію та редагування командного рядка, але програма не має цих функцій. Погляньте на розмір базових виконуваних файлів.

$ 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

Спробуйте звикнути бігати $SHELLабо bashзамість просто sh.


8

У разі , якщо /bin/shце риска , він повинен бути налаштований --with-libeditперед компіляцією. Інакше ви все одно можете працювати set -o viв оболонці, але це нічого корисного не робить.


0

shне має жодної історії. Принаймні, моє:

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
Дійсно? Відповідно до специфікації IEEE це робиться: pubs.opengroup.org/onlinepubs/009695399/utilities/sh.html
jasonwryan

@jasonwryan, ви помітите, що все, що стосується історії чи режиму редагування рядків, позначено UP в цій специфікації, що означає, що це необов'язково (для відповідності POSIX, а не відповідності Unix).
Стефан Шазелас

@ StéphaneChazelas - можливо, правда, але Jasonwryan все одно правильно. Ось ще одне посилання . І до того ж - ви маєте в виду $FCEDITабо $HISTFILEнавіть просто fc? Я вважав, що принаймні вони є обов'язковими - і надання $PS1 \!. Я можу помилятися щодо специфікації POSIX - але всі вони працюють dashі є роками.
mikeserv

1
@mikeserv, не впевнений , що ви маєте в виду, але повторимо, все fc, $FCEDIT, $HISTFILE, НЕ $PS1є обов'язковими в POSIX (з поміткою UP для «User портативності»). У shвідповідних системах Unix будуть такі системи, як UP необхідний для відповідності Unix (крім усього іншого, Unix також вимагає echo -eвиходів -e<LF>). Але якщо система / оболонка вимагає лише POSIX-відповідності, то її не потрібно реалізовувати. Для Debian ashвін може бути включений під час компіляції за допомогою --with-libedit, як уже згадувалося, але Debian принаймні ні.
Stéphane Chazelas

@ StéphaneChazelas - велике спасибі Тому dashя використовую як упакований для Arch, тому різко відрізняється від Debian, який я вважаю. Це цінна інформація. Дивно, що це не в man.
mikeserv
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.