Часть выравнивания по правому краю подсказки

Я уверен, что видел, что у кого-то есть часть их подсказки, выровненной направо в их окне терминала и затем имею фактический курсор, запускаются на второй строке. Я знаю, что могу достигнуть второй строки с "\n" в PS1, но я не могу выяснить, как выровнять часть его направо. Был тем, что я видел просто пробел, добавленный между двумя строками?

26
задан 11.09.2010, 20:09

2 ответа

То, что Вы хотите, может довольно легко быть сделано путем отображения первой строки прежде, чем отобразить подсказку. Например, следующие дисплеи подсказка \w слева от первой строки и подсказки \u@\h справа от первой строки. Это использует $COLUMNS переменная, которая содержит ширину терминала и $PROMPT_COMMAND параметр, который оценен перед ударом, отображает подсказку.

print_pre_prompt () 
{ 
    PS1L=$PWD
    if [[ $PS1L/ = "$HOME"/* ]]; then PS1L=\~${PS1L#$HOME}; fi
    PS1R=$USER@$HOSTNAME
    printf "%s%$(($COLUMNS-${#PS1L}))s" "$PS1L" "$PS1R"
}
PROMPT_COMMAND=print_pre_prompt
17
ответ дан 07.12.2019, 09:31

Можно использовать printf сделать выравнивание по правому краю:

$ printf "%10s\n" "hello"
     hello

$ PS1='$(printf "%10s" "$somevar")\w\$ '
0
ответ дан 07.12.2019, 09:31

Теги

Похожие вопросы