Что я получаю:
host:~ user$ cat example.txt
some texthost:~ stas$
Что я хочу получить:
host:~ user$ cat example.txt
some text
host:~ stas$
Есть ли способ заставить меня cat
вести себя так?
Я использую Bash на Mac OS X.
Большинство инструментов Unix хорошо работают с текстовыми файлами. Текстовый файл состоит из последовательности строк. Строка состоит из последовательности печатных символов, заканчивающихся символом новой строки. В частности, последний символ непустого текстового файла всегда является символом новой строки. Очевидно, example.txt
содержит только some text
без окончательного перевода строки, так что это не текстовый файл.
cat
делает простую работу; превращение произвольных файлов в текстовые файлы не является частью этой работы. Некоторые другие инструменты всегда превращают их ввод в текстовые файлы; если вы не уверены, что отображаемый файл заканчивается новой строкой, попробуйте запустить awk 1
вместо cat
.
Вы можете сделать так, чтобы bash отображал подсказку на следующей строке, если предыдущая команда оставила курсор где-то, кроме последнего поля. Поместите это в свое .bashrc
(вариант от GetFree предложения Денниса Уильямсона ):
shopt -s promptvars
PS1='$(printf "%$((COLUMNS-1))s\r")'$PS1
cat
, поэтому я буду держать это в качестве последнего средства для того времени, когда эта проблема снова начинает беспокоить меня.PROMPT_COMMAND
и, если он не равен 0, использовать\n
символ новой строки ( ) в качестве первого символаPS1
.Я предпочитаю следующий метод ...
Это не оценивает содержимое
example.txt
или не добавляет новую строку. Это просто повторяет новую строку после того, как кошка готова, ее легко запомнить, и никто не задумывается о том, правильно ли они используют сильные или слабые цитаты.Единственным недостатком, на самом деле, является то, что вы получите дополнительный символ новой строки, если файл имеет собственный завершающий символ новой строки.
источник
Я начал использовать ответ @ Gilles, но обнаружил, что если терминал изменяет количество столбцов, приглашение больше не будет находиться в начале строки, как ожидалось. Это может произойти по разным причинам, включая tmux / screen split, ручное изменение размера контейнера GUI, изменения шрифтов и т. Д.
То, что я действительно хотел, было что-то, что добавило бы новую строку, если терминал начал печатать свою подсказку в чем-то кроме первого столбца. Для этого мне нужно было выяснить, как получить текущий столбец, который я использовал для получения этого ответа . Окончательная рабочая подсказка ниже:
источник
__get_terminal_column
?PS1="\n"
простоecho
изменить и не нужно ничего менятьPS1
.Проблема в том, что ваш example.txt не имеет новой строки в конце вашего файла.
источник
cat
работа, поэтому, вероятно, я ищу какой-то обходной путь.example.txt
не имеющий новой строки в конце файла, вот и весь вопрос.Если вы настаиваете на использовании
cat
, это работает для обоих типов файлов, с и без новой строки в конце:Вы можете превратить его в функцию с именем по вашему выбору (даже
cat
) в вашем.bashrc
:источник
Вы также можете добавить в .bashrc
работает для меня.
источник