Хотя @BillThor имеет anwered это очень хорошо, вот мое понимание /etc/rcX.d
и /etc/init.d
:
/etc/init.d
содержит сценарии для запуска и остановки отдельных приложений во время начальной загрузки./etc/rc?.d
каталоги представляют различные уровни выполнения, и сценарии, содержавшие в, являются только символьными ссылками на фактические сценарии в /etc/init.d
каталог. Изменение уровней выполнения изменяет режим системы, как очень простой Однопользовательский режим к режиму только для консоли к усовершенствованному графическому интерфейсу.Так, там нет смысла /etc/rc?.d
каталоги без /etc/init.d
самостоятельно (и конечно, наоборот).
У меня есть другой надлежащий способ сделать это, вставить этот код Ваш ~/.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
поскольку каждый управляет.
Если у Вас есть скопировать/вставить проблема, можно загрузить сценарий
ОБЪЯСНЕНИЯ
(( ))
арифметика в bash
, см. http://wiki.bash-hackers.org/syntax/arith_exprPROMPT_COMMAND
: если установлено, значение выполняется как команда до издания каждой основной подсказки. Посмотрите man bash | less +/PROMPT_COMMAND
tput
лучше, чем трудное кодирование управляющие коды ANSI. См. http://wiki.bash-hackers.org/scripting/terminalcodesPIPESTATUS
: Переменная типа массив, содержащая список статуса выхода, оценивает от процессов в последний раз выполняемом приоритетном конвейере (который может содержать только единственную команду). Посмотрите man bash | less +/PIPESTATUS
cat<<-'EOF'
специальное предложение здесь документ: -
символ означает, что я могу форматировать код и одинарные кавычки на 'EOF'
средства не интерполировать переменныеУ меня есть подсказка с 2 строками, таким образом, потенциально длинный материал не будет влиять на командную строку:
glennj@homebase ~/tmp
2219 $ set | grep PS1=
PS1='\n\u@\h \w\n\! \$ '
Нет \\[
, просто \[
. У Вас также есть дополнительное \[
в запуске.
С 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
unexpected EOF while looking for matching `)'
на строке, которая определяет функцию. Рядом, поскольку я могу сказать, что кажется, что удар думает, что существует открытый(
в выравнивают, но я действительно не вижу, как это могло быть. – dotancohen 21.11.2012, 00:07PS1
, который получил две вкладки. – dotancohen 21.11.2012, 00:26