В чем разница между командой `| cat > output.txt `и команда `| > вывод.txt`

Я делаю что-то подобное со своей подсказкой, и вот как я иду "получить ветку 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, отображается моя текущая ветвь. Зеленый, если чистый, желтый, если грязный, и красный, если есть промежуточные файлы, ожидающие фиксации
  • .
  • Если код выхода последней команды был ненулевым, он отображается (красным цветом )в подсказке, и у меня все еще есть доступ к $?.
2
09.01.2021, 17:45
1 ответ

Концептуально конвейер работает так, что он соединяет вывод левой команды с вводом правой команды.

Итак, строчка:

whoami | cat > out.txt

whoamiбудет печатать в stdoutпо умолчанию, но поскольку есть канал, он будет подключен к входу cat.

Так что же это значит?

whoami | > out.txt

Ну, вы говорите, что ни к чему не прикрепляете вывод whoami. Затем перенаправьте вывод ничего в файлout.txt

Оператор >означает усечение файла, названного правым аргументом, создание его при необходимости, а затем перенаправление вывода левой команды в файл. Обратите внимание, что

> out.txt

создаст пустой файл.

2
18.03.2021, 22:37

Теги

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