Как я могу заставить команду «bind» работать в sh shell

Как заставить следующий скрипт запускать, когда я использую sh shell:

#!/bin/bash bind '^[[3'=prefix-2 bind '^[[3~'=delete-char-forward bind '^[[1'=prefix-2 bind '^[[1~'=beginning-of-line bind '^[[4'=prefix-2 bind '^[[4~'=end-of-line 

связывать в sh

bind – команда bash, а не команда sh. Если вы не используете bash, команда bind не будет доступна.

В зависимости от платформы sh может быть одной из нескольких оболочек. Все они обеспечивают общее ядро для сценариев. У обычного sh практически нет удобных функций для интерактивного использования; в частности, plain sh не имеет понятия привязки клавиш.

В некоторых системах sh is bash (который запускается в режиме совместимости при вызове sh ) и использует библиотеку readline для редакции командной строки и поддерживает привязки ключей через встроенный bind . Другие системы используют более компактные оболочки, такие как тире или ksh, которые быстрее выполняют сценарии. Если вы хотите порядочный интерфейс командной строки, не вызывайте sh .

Обратите внимание, что скрипт, который вы написали, не работает при запуске (кроме того, чтобы печатать предупреждения о том, что команда bind бессмысленна в неинтерактивной оболочке). Файл, содержащий только определения привязки ключей, не может быть полезным автономным исполняемым файлом, а всего лишь фрагментом оболочки. Таким образом, shebang наверху не пригодится.

bind не доступен в sh . Измените ~/.inputrc если вы хотите изменить привязки readline.