Подсказка Bash, которая не ударит долгие команды

Хотя @BillThor имеет anwered это очень хорошо, вот мое понимание /etc/rcX.d и /etc/init.d:

  • /etc/init.d содержит сценарии для запуска и остановки отдельных приложений во время начальной загрузки.
  • /etc/rc?.d каталоги представляют различные уровни выполнения, и сценарии, содержавшие в, являются только символьными ссылками на фактические сценарии в /etc/init.d каталог. Изменение уровней выполнения изменяет режим системы, как очень простой Однопользовательский режим к режиму только для консоли к усовершенствованному графическому интерфейсу.

Так, там нет смысла /etc/rc?.d каталоги без /etc/init.d самостоятельно (и конечно, наоборот).

6
23.05.2017, 14:33
4 ответа

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


У меня есть другой надлежащий способ сделать это, вставить этот код Ваш ~/.bashrc или создайте новый файл и source file :

PROMPT_COMMAND=$(
    cat<<-'EOF'

    retval=$?

    RED=$(tput setaf 1)
    GREEN=$(tput setaf 2)
    STOP=$(tput sgr0)

    # arithmetic using bash parameter expansion on a array
    if (($retval + ${PIPESTATUS[@]/%/+} + 0)); then
        PS1="\[$RED\]\u@\h:\w$ \[$STOP\]"
    else
        PS1="\[$GREEN\]\u@\h:\w$ \[$STOP\]"
    fi
EOF
)

Это добьется цели =)

Bash выполнит код внутри PROMPT_COMMAND поскольку каждый управляет.

Если у Вас есть скопировать/вставить проблема, можно загрузить сценарий

tput

ОБЪЯСНЕНИЯ

  • (( )) арифметика в bash, см. http://wiki.bash-hackers.org/syntax/arith_expr
  • PROMPT_COMMAND : если установлено, значение выполняется как команда до издания каждой основной подсказки. Посмотрите man bash | less +/PROMPT_COMMAND
  • tput лучше, чем трудное кодирование управляющие коды ANSI. См. http://wiki.bash-hackers.org/scripting/terminalcodes
  • PIPESTATUS : Переменная типа массив, содержащая список статуса выхода, оценивает от процессов в последний раз выполняемом приоритетном конвейере (который может содержать только единственную команду). Посмотрите man bash | less +/PIPESTATUS
  • cat<<-'EOF' специальное предложение здесь документ: - символ означает, что я могу форматировать код и одинарные кавычки на 'EOF' средства не интерполировать переменные
9
27.01.2020, 20:23
  • 1
    Добавленная ссылка документа о Вашей проблеме –  Gilles Quenot 20.11.2012, 23:15
  • 2
    Спасибо. Я добираюсь unexpected EOF while looking for matching `)' на строке, которая определяет функцию. Рядом, поскольку я могу сказать, что кажется, что удар думает, что существует открытый ( в выравнивают, но я действительно не вижу, как это могло быть. –  dotancohen 21.11.2012, 00:07
  • 3
    Это - копия и проблема вставки, это исчезнет, если Вы повторно сделаете отступ. –  Gilles Quenot 21.11.2012, 00:16
  • 4
    На самом деле я действительно повторно делал отступ с вкладками. Все в функции добралось, одна вкладка сохраняют для строк, которые начинаются PS1, который получил две вкладки. –  dotancohen 21.11.2012, 00:26
  • 5
    ! Я узнал о много из этого сообщения, не только о подсказке, но и о других аспектах также. Вы были очень услужливы, и я нашел некоторых положительных героев в Вас задними стойками также, что я иду до, извлекают уроки из.Спасибо! –  dotancohen 21.11.2012, 00:46

У меня есть подсказка с 2 строками, таким образом, потенциально длинный материал не будет влиять на командную строку:

glennj@homebase ~/tmp
2219 $ set | grep PS1=
PS1='\n\u@\h \w\n\! \$ '
3
27.01.2020, 20:23
  • 1
    Настолько полезный! У меня было это в пользовательской подсказке для grass.osgeo.org и теперь пробующий в регулярной подсказке удара также. Это покончило проблема неизбиения. –  Nikos Alexandris 22.11.2015, 09:10

Нет \\[, просто \[. У Вас также есть дополнительное \[ в запуске.

1
27.01.2020, 20:23
  • 1
    Спасибо, я обновил вопрос. На самом деле я уже заботился о '\\' проблема, прежде чем я отправил. –  dotancohen 20.11.2012, 21:12

С GNU sed:

sed -nE '/^.+,.+,.+,.+$/p' file > output_file
-121--152132-

glenn jackman GNU/AWK ответ является элегантным, но чуть более просто

awk 'BEGIN {FS=OFS="\t"} match($5,/[0-9]+/,arr) {print $0,arr[0]}' file
-121--78989-

Это не прямой ответ на первоначальный вопрос, это просто пример использования.

Благодаря ответу @ stArdustͲ's я нашел подходящее решение для пользовательской командной строки, чтобы показать состояние батареи * в правом верхнем углу терминала. Цвета определяются в независимом файле, источником которого является файл .bashrc .

PROMPT_COMMAND=$(
    cat<<-'EOF'
    function battery_percentage {
        PERCENTAGE=$(upower -i $(echo $(upower -e |grep 'battery')) |grep 'percentage' |sed -e 's/^[ \t]*//;s/[[:space:]]\+/ /g;s/[ \t]*$//' |cut -d' ' -f2 |cut -d"%" -f1)
        BColor='IGray'
        if [ "${PERCENTAGE}" -lt 15 ]
            then PColor='BlinkIRed'
                 PBackground='On_White'
            else PColor='Gray'
        fi
        echo "\001${!BColor}\002Battery\001${!PColor}\002 ${PERCENTAGE}% \001${Reset}\002"
    }

    function battery_time {
        TIME=$(upower -i $(echo $(upower -e |grep 'battery')) |grep 'time' |sed -e 's/^[ \t]*//;s/[[:space:]]\+/ /g;s/[ \t]*$//' |cut -d' ' -f4,5)
        echo "\001${IGray}\002${TIME}\001${Reset}\002"
    }

    export PS1="\[\e[s\]\[\e[1;\$((COLUMNS-26))f\]$(battery_percentage) $(battery_time)\[\e[u\]${PS1}"
EOF
)

Наконец, PS1 выглядит следующим образом:

\[\e[s\]\[\e[1;$((COLUMNS-26))f\]\001\e[0;38;5;8m\002Battery\001\e[0;38;5;7m\002 82% \001\e[0m\002 \001\e[0;38;5;8m\0023.6 hours\001\e[0m\002\[\e[u\]\[\e[0;38;5;232m\]\[\e[48;5;5m\] \u \[\e[0;38;5;5m\]\[\e[48;5;11m\] \[\e[0;38;5;232m\]\[\e[48;5;11m\]@\H \[\e[0;38;5;11m\]\[\e[48;5;0m\]\[\e[0m\] \[\e[0;38;5;6m\]\w\a \[\e[1;38;5;5m\]→\e[0m

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


* ноутбука ThinkPad

1
27.01.2020, 20:23

Теги

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