Вставьте пустую строку между приглашениями командной строки

8

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

Я хотел бы добавить новую строку каждый раз перед отображением командной строки. Вот так:

<clutter>
<blank line>
name@machine:~$

Я использую оболочку bash. Как этого достичь?

Slothworks
источник
1
Я предпочитаю это: lifehacker.com/5840450/…
Maerlyn

Ответы:

21

Один из способов добиться этого - изменить .bashrcфайл. Просто поместите следующее в конец .bashrcфайла.

PS1="\n$PS1"

Чтобы объяснить, как это работает, PS1есть переменная, содержащая то, что должно отображаться в качестве приглашения. Все это говорит "установлено PS1на предыдущее содержимое PS1, с добавленным символом новой строки". Включение его в .bashrcбольшинство дистрибутивов просто заставляет bash запускать его каждый раз, когда вы открываете интерактивную оболочку (но не оболочку входа в систему - см. Различие между оболочкой входа и оболочкой без входа в систему? ).

Slothworks
источник
2
Чтобы объяснить, как это работает, PS1 - это переменная, содержащая то, что должно отображаться в качестве приглашения. Все это говорит: «установите PS1 в предыдущее содержимое PS1 с добавленным символом новой строки».
Музер
@Muzer Может быть, ваш комментарий может быть правкой
rpax
@rpax хорошая идея, отправлено. Добавил немного о самом .bashrc тоже.
Muzer
Удовлетворительно, выполнение PS1="\n$PS1"в терминале имеет мгновенный эффект :)
mwfearnley
Работает совершенно нормально, за исключением того, что после ввода clear(или нажатия Ctrl+l) первая показанная строка является пустой строкой. Для некоторых это может быть небольшая деталь, но я бы предпочел, чтобы первая строка была подсказкой.
Роберт Кушнье
6

Вы можете использовать PROMPT_COMMAND :

PROMPT_COMMAND="printf '\n';$PROMPT_COMMAND"

или:

PROMPT_COMMAND="echo;$PROMPT_COMMAND"
cuonglm
источник
2
Должен ли быть первый PROMPT_COMMAND="printf '\n';$PROMPT_COMMAND"? В его нынешнем виде он ничего не делает, когда я помещаю его в .bashrcфайл.
Ленивец
@Slothworks: Да, конечно, мой неправильный набор, исправил это.
Cuonglm
Более чем один способ сделать это действительно :) Спасибо за ваш ответ.
Ленивец
2
Альтернатива Slothworks лучше, потому что ваша команда выполняет дополнительную команду после каждой команды, запускаемой в командной строке. printfи echo, конечно, они очень легкие, но все равно не имеет смысла использовать, PROMPT_COMMANDкогда они PS1будут выполнять эту работу.
Миккель,
Обратите внимание: если вы хотите добавить в команду что-то, что меняется каждый раз, когда вы запускаете приглашение, тогда вы хотите PROMPT_COMMAND, а не PS1. Это обычно используется с git для отображения, какая ветвь репо активна. Google для предложений PROMPT_COMMAND, чтобы увидеть, что можно сделать.
Уолтер
4

Альтернатива: оставьте строку в PS1=приглашении .bashrc. Вот буквально, как я настроил .bashrcна каждой машине Linux, которую я имею:

PS1=' 
serg@ubuntu [$(pwd)]
================================
$ '

Как вы видите в моем примере выше, имя пользователя жестко запрограммировано в приглашении. Конечно, вы можете использовать escape-последовательности, которые предоставляет bash или другая оболочка (например, ksh ), но немного более нейтральным вариантом будет использование замены параметров с помощью команд типа whoami(сообщите ваше имя пользователя) и hostname(очевидно, сообщает имя хоста). Например:

PS1='
$(whoami)@$(hostname):$(pwd)
$ '

Для более забавных вещей с подсказкой, .bashrcи расширениями параметров, проверьте мои ответы здесь:

Как проверить состояние батареи с помощью терминала?

Как я могу заставить свои терминалы / оболочки иметь индивидуальный дизайн? а также

Как показать часы в терминале перед командной строкой?

Сергей Колодяжный
источник
Почему имя пользователя и имя компьютера жестко закодированы? Было бы хорошо, если бы они были параметризованы
rpax
@ Rpax мое реальное имя пользователя отличается. Это мое имя, которое вы видите в приглашении. Название машины тоже другое.
Сергей Колодяжный
Я имел в виду какой-то $(whoami)вместоusernamehardcoded
rpax
@rpax О, это тоже можно сделать. Я включу это в свой ответ
Сергей Колодяжный,
4
Обратите внимание, что вы можете использовать \uи \hдля вашего имени пользователя и имени хоста, соответственно. Вы можете увидеть больше специальных символов (например, текущее время в различных форматах) здесь
Yossarian