Оболочка 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, помните, что ^ идет к началу строки (клавиша "Главная" не будет работать), а ^ е заканчивается.