Режим редактирования vi в dash ( /bin/sh ) [дубликат]

На этот вопрос уже есть ответ здесь:

TL;DR : set -o vi не включает режим редактирования vi

Во многих оболочках, включая dash, стандарт POSIX предписывает, что set -o vi включит режим редактирования vi, в котором пользователь интерактивной оболочки может перемещаться по строке, используя vi-стиль ярлыков. В dash (оболочка Ubuntu по умолчанию, симлинкованная на /bin/sh) это не работает, хотя на странице man указано, что эта возможность доступна.

Пример :

$ dash
$ set -o vi
$ hello wolrd^[I

Что должно было произойти, так это то, что при нажатии Esc , Shift + i курсор должен был перескочить в начало строки. Как вы можете видеть, вместо этого я получаю на выходе управляющий символ. Я попросил нескольких пользователей проверить это в чате AskUbuntu, и они подтвердили такое же поведение.

Обратите внимание, что это не связано с эмулятором терминала - я тестировал это в трех разных: xterm, gnome-terminal и terminator. Я тестировал это с другими оболочками, bash, mksh и ksh93 - все работают правильно, как и ожидалось, так что это проблема только dash.

5
задан 18 September 2016 в 19:44

1 ответ

Мне было любопытно на предмет этого так, я загрузил исходный код tarball с восходящих загрузок ТИРЕ и извлек исходные файлы. Я проверил на файл README, который должен предоставить информацию о программе и ее опциях сборки, но не было никого, таким образом, я работал ./configure --help и его вывод включает:

Optional Packages:
  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
  --with-libedit          Compile with libedit support

Так, похоже, что libedit библиотекой пользуются для обеспечения возможностей редактирования строки, но это не значение по умолчанию при создании источника. Я также нашел этот ответ на сообщение списка рассылки на наборе-o vi не работающий:

Я думаю, что это требует, чтобы тире был создан с поддержкой libedit работе.

Я проверил, какие библиотеки были связаны с dash исполняемый файл на моем сервере Ubuntu и отметил libedit не был включен:

$ ldd /bin/dash
        linux-vdso.so.1 =>  (0x00007fffcfbd6000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f013a0b7000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f013a475000)

Я предполагаю это, когда специалисты по обслуживанию пакета Debian создают dash пакет, они опускают эту дополнительную конфигурацию, поскольку они не хотели бы sh иметь внешние зависимости от других библиотек. Они могли, вероятно, связать библиотеку статически, но главную причину для использования dash как sh должен сохранить оболочку максимально маленькой и быстрой так, чтобы сценарии запуска выполненный быстро.

Править: Я просто искал “libedit тире”, и главным результатом был очень похожий вопрос на этом сайте, которому хорошо ответил muru.

Создание Тире с поддержкой редактирования строки

Для тех, кому могло бы быть интересно, это, шаги, требуемые создавать из источника.

  1. Загрузите новый источник tarball:

    wget http://gondor.apana.org.au/~herbert/dash/files/dash-0.5.9.tar.gz
    wget http://gondor.apana.org.au/~herbert/dash/files/dash-0.5.9.tar.gz.sha256sum
    
  2. Проверьте подлинность tarball:

    sha256sum -c <( awk '/dash/{ print $1 "  "  $3}' dash-0.5.9.tar.gz.sha256sum )
    gpg --verify --auto-key-retrieve dash-0.5.9.tar.gz.sha256sum
    
  3. Извлеките исходные файлы и изменение в исходный каталог:

    tar -xf dash-0.5.9.tar.gz
    cd dash-0.5.9
    
  4. Выполненный ./configure --with-libedit создать Make-файлы. Однако это перестанет работать бесшумно если версия разработки libedit библиотека установлена. Было бы лучше, если бы настраивать сценарий жаловался больше verbosely, поскольку не было очевидно, что этому не удавалось найти необходимые файлы.

    sudo apt-get install libedit-dev
    ./configure --with-libedit
    
  5. Создайте программу и (дополнительно) установите ее в /usr/local/bin:

    make
    sudo make install
    
1
ответ дан 23 November 2019 в 10:41

Другие вопросы по тегам:

Похожие вопросы: