Linux terminal перенос строки

Перенос строки в терминале

Приветствую! Может кто знает, как решить проблему. Когда работаешь в обычном терминале Ubuntu и вводишь длинную команду, то доходя до конца окна терминала она не переноситься на новую строку, а продолжает печать символы в той же строке. В итоге все смешивается в кашу. Куда копать?

И тег [ code ] [ /code ] не забывай.

Проблема наблюдается в том терминале где ты уже что-то делал или в новооткрытом тоже?

Xenius ★★★★★ ( 20.11.18 14:46:55 MSK )
Последнее исправление: Xenius 20.11.18 14:50:11 MSK (всего исправлений: 2)

ты точно в терминале а не в эмуляторе терминала?

stty -a speed 38400 baud; rows 25; columns 51; line = 0; intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = ; eol2 = ; swtch = ; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0; -parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel iutf8 opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -flusho -extproc 

В любом открытом. Приходится разворачивать на полный экран, чтобы команды не обрезались.

Ну глюк странный конечно. Можешь пользоваться другим эмулятором терминала вместо gnome-terminal, например xterm или konsole

Обрати внимание на: rows 25; columns 51; Это значит, что устройство думает, что у тебя в терминале 51 символ на строку. Проверь, если ты расширяешь и сжимаешь окно терминала, это число меняется?

Командой вроде этой можно установить размер терминала, после этого должно быть нормально:

Очень странный! Рылся в Google, но тщетно.

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

Вероятно, мне стоит закинуть ее в .bashrc

И дополнительно, если зайти на сервере по SSH, то все в порядке, а на локальном компьютере проблема. Проблема в локальных настройках 100%, но вот пытаюсь понять, где смотреть.

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

Ну ладно, а после этой команды перенос начинает работать? (если размер установить совпадающий с размером окна)

Для проверки запусти vim или less, должен быть на всё окно.

Вероятно, мне стоит закинуть ее в .bashrc

Вряд ли это хорошая идея, это временный ворэкраунд

Проблема в локальных настройках 100%, но вот пытаюсь понять, где смотреть.

Ну у тебя терминал на libvte, так что проверь:

Читайте также:  Запуск vnc сервера linux

1) Есть ли проблема в xterm или другом терминале НЕ на vte 2) Есть ли проблема в других терминалах на vte (например xfce Terminal)

Тогда будет понятно, в настройках VTE проблема, в настройках gnome-terminal или более глобальная. Я полагаю что vte, мне эта либа вообще не нравится.

Большое спасибо за помощь!

Да, закидывать в .bashrc — плохая идея.

Если установить команду, то терминал хорошо отображает длину строки, но в vim все превращается в кашу 🙂

Я проверю другие терминалы. Буду копать туда.

Ловил такие проблемы из-за неправильных настроек цветов и прочих свистоперделок, попробуй сбросить на дефолт.

Да! Проблема была в настройках приглашения в систему. Я менял ее, делал более минималистичной.

Вопрос решен. Всем спасибо за помощь!

И что это значит, что ты поменял и в каких файлах?

Это от неправильного $PS1. «Закрывай» \] то, что не выводится в консоль.

Все равно не понял, что такое $PS1, и в каком файле нужно прописать [esc-sequence]?

Все равно не понял, что такое $PS1, и в каком файле нужно прописать

Если где-либо меняли переменную окружения PS1 (вид приглашения комстроки bash и совместимых оболочек) на что-либо и в нее были включены какие-либо неотображаемые символы (например, команды ANSI), то каждую непрерывную группу таких символов нужно обрамлять скобками «\[» в начале и «\]» в конце группы. Тогда bash, подсчитывая длину приглашения, вычтет из реальной длины строки приглашения длину невидимой части, что позволит избежать глюков от неправильного переноса строки по границе окна терминала.

bormant ★★★★★ ( 23.11.19 19:18:00 MSK )
Последнее исправление: bormant 23.11.19 19:18:45 MSK (всего исправлений: 1)

Источник

Перевод строки в linux

Команда echo — это очень простая и в то же время часто используемая встроенная команда оболочки Bash. Она имеет только одно назначение — выводить строку текста в терминал, но применяется очень часто в различных скриптах, программах, и даже для редактирования конфигурационных файлов.

В этой статье мы рассмотрим что представляет из себя команда echo linux, как ее можно использовать и в каких ситуациях. Но сначала рассмотрим синтаксис самой команды.

Команда echo linux

Команда echo — это не системная утилита, у нее нет исполняемого файла. Она существует только внутри интерпретатора Bash. Синтаксис команды echo linux очень прост: $ echo опции строка Опций всего несколько, давайте рассмотрим их, чтобы вы могли лучше ориентироваться в работе утилиты:

  • -n — не выводить перевод строки;
  • -e — включить поддержку вывода Escape последовательностей;
  • -E — отключить интерпретацию Escape последовательностей.

Это все опции, если включена опция -e, то вы можете использовать такие Escape последовательности для вставки специальных символов:

  • /c — удалить перевод строки;
  • /t — горизонтальная табуляция;
  • /v — вертикальная табуляция;
  • /b — удалить предыдущий символ;
  • /n — перевод строки;
  • /r — символ возврата каретки в начало строки.

Пожалуй, это все, что нужно знать о команде echo, а теперь давайте рассмотрим как с ней работать.

Примеры работы echo

Давайте рассмотрим как пользоваться echo. Сначала просто выведем строку на экран:

echo Linux Open Source Software Technologies

Также можно вывести значение переменной. Сначала объявим переменную:

Затем выведем ее значение:

Как уже говорилось, с помощью опции -e можно включить интерпретацию специальных последовательностей. Последовательность \b позволяет удалить предыдущий символ. Например, удалим все пробелы из строки:

Читайте также:  Sata raid контроллер linux

echo -e «Linux \bopen \bsource \bsoftware \btechnologies»

Последовательность \n переводит курсор на новую строку:

echo -e «Linux \nopen \nsource \nsoftware \ntechnologies»

С помощью \t вы можете добавить горизонтальные табуляции:

echo -e «Linux \topen \tsource \tsoftware \ttechnologies»

Можно совместить переводы строки и табуляции:

echo -e «Linux \tnopen \tnsource \tnsoftware \tntechnologies»

Точно так же можно применить вертикальную табуляцию:

echo -e «Linux \vopen \vsource \vsoftware \vtechnologies»

С помощью последовательности \r можно удалить все символы до начала строки:

echo -e «Linux \ropen source software technologies»

Последовательность -c позволяет убрать перевод на новую строку в конце сообщения:

echo -e «Linux open source software technologies\c»

Дальше — больше. Вы можете разукрасить вывод echo с помощью последовательностей управления цветом Bash. Для доступны такие цвета текста:

Например. раскрасим нашу надпись в разные цвета:

echo -e «\033[35mLinux \033[34mopen \033[32msource \033[33msoftware \033[31mtechnologies\033[0m»

С основными параметрами команды echo разобрались, теперь рассмотрим еще некоторые специальные символы bash. Вы можете вывести содержимое текущей папки просто подставив символ *:

Также можно вывести файлы определенного расширения:

Я уже говорил, что echo можно использовать для редактирования конфигурационных файлов. Вы можете использовать запись echo в файл linux, если он пуст:

echo 1 > /proc/sys/net/ipv4/ip_forward

Если файл не пуст, и вам необходимо добавить свою строчку в конец файла используйте символ перенаправления вывода >>:

echo «UUID=09ec0871-2f55-4dd5-aeb2-cacc4a67907c /var/tmp btrfs subvol=@/var/tmp 0 0» >> /etc/fstab

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

Выводы

В этой статье была рассмотрена команда echo linux. Несмотря на свою простоту, она может применяться для решения различных задач и незаменима при написании простых скриптов. Надеюсь, эта информация была вам полезной.

как добавить перенос строки

Подскажите, как в bash в конец текствого файла добавить перенос на новую строку?

Re: как добавить перенос строки

Ты уже утомил дурными вопросами. Это просто неуважение к форуму.

Re: как добавить перенос строки

Солидарен с sdio. Попробуй хотя бы книжку какую-нибудь почитать.

Re: как добавить перенос строки

Вот нада все подобные вопросы закинуть в FAQ, и потом кричать: В FAQ с****ы дети (с)LOR

Re: как добавить перенос строки

Закидывай, к lor-wiki у тебя доступ есть.

Re: как добавить перенос строки

😀
В голову пришло:
for i in `cat 1`; do echo «$i» >> 2; done; echo «» >> 2; mv 2 1

Re: как добавить перенос строки

ну ессно 1 это у нас файл в котором нужно добавить пуструю строку в конец

Re: как добавить перенос строки

что-то у тебя как-то сложно или я задачу не правильно понял мне по описанию задачи в голову пришло только echo -e «\n» >> file

Re: как добавить перенос строки

=)
Да че первое в голову пришло то и написал

Re: как добавить перенос строки

Re: как добавить перенос строки

-en, а то два переноса добавишь

Re: как добавить перенос строки

Re: как добавить перенос строки

Re: как добавить перенос строки

Ищешь код перевода строки в /dev/random и добавляешь его в файл.

Re: как добавить перенос строки

Тоже хорошо. Созерцать на берегу реки, как мимо проплывают разные символичные, но непостижимые фигуры и когда-нибудь мимо убеленного благородными сединами старца прошествует Истинный Знак. То будет Знак перевода строки. Он увидит его не подымая век. К тому времени он уже сможет мимолетным движением брови вставлять любые знаки в между небесными кварками. Но не сделает этого ибо не захочет входить вновь в кармический круговорот.

Читайте также:  Автоматический поиск драйверов linux

Перевод строки в linux

Ещё одна тривиальная задача, но, как выяснилось, не всем известно её решение. Итак, сегодня мы поговорим о переводе строки в Linux. Есть *nix, на который мы wget-ом, например, вытащили текстовик (конфигурационный файл, скрипт…), созданный на компьютере под управлением Windows. Дело в том, что в Windows системах перенос строки обозначается двумя символами — CR и LF, а в Linux-е только CR (возврат каретки). Соответственно, файл в терминале будет выглядеть примерно так:

Вот эти ^M в конце каждой строки — это и есть лишний символ, доставшийся нам от Windows. В случае с CSS — ничего страшного не случится, но если это стартовый скрипт, например, из статьи про SSHGuard — работать он не будет. Для того, чтобы исправить ситуацию существует множество решений, конечно, но с моей точки зрения есть два наиболее изящных. Первое решение подойдёт тем, у кого на Linux-машине установлен интерпретатор Perl. Вот он:

Второй же вариант реализуется исключительно средствами командной оболочки bash:

cat filename.in | col -b > filename.out

Оба варианта работоспособны полностью, но я предпочитаю второй, так как он оставляет нетронутым оригинальный файл на случай, если что-то пойдёт не так.

Источник

How can I have a newline in a string in sh?

What should I do to have a newline in a string? Note: This question is not about echo. I’m aware of echo -e , but I’m looking for a solution that allows passing a string (which includes a newline) as an argument to other commands that do not have a similar option to interpret \n ‘s as newlines.

13 Answers 13

If you’re using Bash, you can use backslash-escapes inside of a specially-quoted $’string’ . For example, adding \n :

STR=$'Hello\nWorld' echo "$STR" # quotes are required here! 

If you’re using pretty much any other shell, just insert the newline as-is in the string:

Bash recognizes a number of other backslash escape sequences in the $» string. Here is an excerpt from the Bash manual page:

Words of the form $'string' are treated specially. The word expands to string, with backslash-escaped characters replaced as specified by the ANSI C standard. Backslash escape sequences, if present, are decoded as follows: \a alert (bell) \b backspace \e \E an escape character \f form feed \n new line \r carriage return \t horizontal tab \v vertical tab \\ backslash \' single quote \" double quote \nnn the eight-bit character whose value is the octal value nnn (one to three digits) \xHH the eight-bit character whose value is the hexadecimal value HH (one or two hex digits) \cx a control-x character The expanded result is single-quoted, as if the dollar sign had not been present. A double-quoted string preceded by a dollar sign ($"string") will cause the string to be translated according to the current locale. If the current locale is C or POSIX, the dollar sign is ignored. If the string is translated and replaced, the replacement is double-quoted. 

Источник

Оцените статью
Adblock
detector