Оболочка KornShell (ksh)

Хорошо, я уверен, что это просто, но это сводит меня с ума. Недавно я поработал над программой, где мне пришлось немного ускользнуть во времени и использовать Redhat 9. Когда я набираю командную строку из стандартного xterm, запуская KornShell (ksh), и я дохожу до конца переместите слайды экрана вправо (отрезая левую часть моей команды) вместо того, чтобы обернуть текст вокруг новой строки. Это усложняет меня, потому что я не могу легко скопировать и вставить из предыдущей команды прямо из командной строки. Я должен посмотреть историю и вставить команду оттуда. В случае, если вам интересно, я делаю много сценариев командной строки awk, которые заставляют линию работать довольно долго.

Есть ли способ заставить командную строку обернуть вместо переключения видимости в правую часть команды, которую я набираю?

Я вылил через параметры страницы man без везения.

Я запускаю:

  • XFree86 4.2.99.903 (174)
  • KSH 5.2.14.

Спасибо.

Ответ 1

Вы сделали man ksh?

Вы хотите сделать set -o multiline.

Выдержка из man ksh:

многострочный:

Встроенные редакторы будут использовать несколько строк на экране для   линии, длина которых больше ширины экрана. Это может не   работайте для всех терминалов.

Ответ 2

eval $(resize) должен это сделать.

Ответ 3

Если возможно, попробуйте разбить команду на несколько строк, добавив \ то есть:

$ mycommand -a foo \
  -f bar \
  -c dif

Ответ 4

Я не знаю, как заставить оболочку обернуть, но я бы спросил, почему вы так долго пишете строки. С awk-скриптами я просто переношу script в одинарные кавычки, а затем разбиваю строки, где хочу. Это становится сложно, если вам нужны одинарные кавычки в script - и дьявольски, если вам нужны одиночные и двойные кавычки. На самом деле правило достаточно просто: используйте одинарные кавычки для обертывания всего script, а когда вам нужна одна цитата в script, напишите '\''. Первая цитата завершает предыдущую строку с одним кавычком; обратная косая черта - единственная цитата дает единую цитату; и последняя одиночная кавычка запускает новую одиночную кавычку. Это действительно становится волосатым, если вам нужно избегать этих символов для eval или чего-то подобного.

Другой вопрос - почему бы не запустить в редактор. Поскольку я - жесткий псих (я использую vi более 20 лет, поэтому для меня это легче, чем альтернативы), у меня есть оболочка Korn, установленная в режиме vi (set -o vi), и может сделать escape-v, чтобы запустить редактор во все, что я набрал.

Ответ 5

Это своего рода прагматичный ответ, но когда это для меня проблема, я обычно делаю что-то вроде:

strings ~/.history | grep COMMAND

или

strings ~/.history | tail

(Файл истории содержит в нем немного двоичных данных, поэтому "строки" )

Ответ 6

Простой ответ:

$ set -o multiline

ksh раньше, чем 5.12, как и ksh, поставляемый с NetBSD 6.1, не имеет этой опции. Вам придется отключить текущий режим интерактивной линии ввода, который обычно является emacs:

$ set +o emacs

Это полностью отключает многих игроков, например, закрытие табуляции или использование клавиши "Стрелка вверх" для отката предыдущей команды.

Если вы решили каким-то образом привыкнуть к режиму emacs, помните, что ^ идет к началу строки (клавиша "Главная" не будет работать), а ^ е заканчивается.