KornShell (ksh) обтекание - PullRequest
       10

KornShell (ksh) обтекание

10 голосов
/ 27 сентября 2008

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

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

Я пролистал страницы справочника без удачи.

Я бегу:

  • XFree86 4.2.99.903 (174)
  • KSH 5.2.14.

Спасибо.

Ответы [ 6 ]

6 голосов
/ 30 сентября 2008

Вы делали man ksh?

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

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

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

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

4 голосов
/ 24 ноября 2009

eval $ (изменить размер) должен сделать это.

2 голосов
/ 27 сентября 2008

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

$ mycommand -a foo \
  -f bar \
  -c dif
1 голос
/ 12 сентября 2013

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

$ set -o multiline

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

$ set +o emacs

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

Если вы решили как-то привыкнуть к режиму emacs, помните, что ^ a переходит к началу строки (клавиша "Home" не работает) и ^ e доходит до конца.

0 голосов
/ 30 сентября 2008

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

strings ~/.history | grep COMMAND

или

strings ~/.history | tail

(Файл истории содержит немного двоичных данных, следовательно, «строки»)

0 голосов
/ 27 сентября 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...