Я делаю что-то подобное со своей подсказкой, и вот как я иду "получить ветку git
в моей подсказке, по-прежнему показывая код выхода последней команды":
parse_git_branch() {
exit_code=$?
local stdcolor
local branchcolor
local lines
stdcolor="^[[0;32m"
if [[ -d./.git ]] || $( git status > /dev/null 2>&1 ); then
lines=$(git status -s | wc -l)
if [[ 0 -eq ${lines} ]]; then
# Working copy is clean
branchcolor="^[[1;32m"
elif git status -s 2> /dev/null | grep -q '^A'; then
# If we have staged commits waiting, red; else yellow
branchcolor="^[[1;31m"
else
branchcolor="^[[1;33m"
fi
git branch 2> /dev/null | sed -e '/^[^*]/d' -e "s/* \(.*\)/ $stdcolor($branchcolor\1$stdcolor)/"
fi
return $exit_code
}
export PS1='\[\e]0;\u@\h: \w\a\]\[\e[38;5;14m\]\u\[\e[38;5;8m\]@\[\e[38;5;6m\]\h\[\e[38;5;8m\]:\[\e[38;5;10m\]\w'"\$(parse_git_branch) \e[31m\${?##0}\n"'\[\e[$(((($?>0))*31))m\]\$\[\e[0m\] '
(очищенное )результирующее приглашение и его внешний вид в git
рабочей области:
me@host:~/src/project (devel)
$ false
me@host:~/src/project (devel) 1
$ true
me@host:~/src/project (devel)
$
Результат всего, что:
git
, отображается моя текущая ветвь. Зеленый, если чистый, желтый, если грязный, и красный, если есть промежуточные файлы, ожидающие фиксации $?
. Концептуально конвейер работает так, что он соединяет вывод левой команды с вводом правой команды.
Итак, строчка:
whoami | cat > out.txt
whoami
будет печатать в stdout
по умолчанию, но поскольку есть канал, он будет подключен к входу cat
.
Так что же это значит?
whoami | > out.txt
Ну, вы говорите, что ни к чему не прикрепляете вывод whoami
. Затем перенаправьте вывод ничего в файлout.txt
Оператор >
означает усечение файла, названного правым аргументом, создание его при необходимости, а затем перенаправление вывода левой команды в файл. Обратите внимание, что
> out.txt
создаст пустой файл.