При чтении о Linux я получил следующее:
Поскольку stderr не является тем же как stdout, сообщения об ошибках будут все еще замечены на окнах терминала в вышеупомянутом примере.
Если Вы хотите перенаправить stderr в отдельный файл, Вы используете дескриптор файла stderr номер (2), большее - чем знак (>), сопровождаемый под названием файл, Вы хотите держать все, что рабочая команда пишет в stderr:
$ do_something 2> error-file
Специальная краткая нотация может использоваться для помещения чего-либо записанного в дескриптор файла 2 (stderr) в том же месте как дескриптор файла 1 (stdout): 2> &1
$ do_something > all-output-file 2>&1
колотите разрешает более легкий синтаксис для вышеупомянутого:
$ do_something >& all-output-file
Здесь do_something
некоторая команда. Я действительно не получаю то, что происходит внизу во всех 3 вышеизложенных командах. Я знаю &
используется для того, чтобы сделать процесс фоновым процессом, но я не получаю логику. Я плохо знаком с этой разновидностью, кто-то может объяснить это?
Ваш беспорядок может состоять в том, потому что >&
полностью другая вещь, чем &
.
>&
или <&
используются в перенаправлении для указания на дескриптор файла (fd). Вышеупомянутые случаи перенаправляют к 1 и 2, которые являются stdout и stderr соответственно.
>
означает, что "перенаправление stdout"
2>
означает, что "fd 2 перенаправления (stderr)"
>&2
значит "перенаправление stdout для fd 2 (stderr)". Отметьте, как это отличается от >2
, который значил бы "перенаправление stdout для файла, названного 2
" - это - то, почему эти &
важно. Это указывает, что следующей вещью будет fd, не имя файла.
Теперь, конечно, поскольку Вы отметили, если &
сидит у себя без символа перенаправления, то это означает что-то совершенно другое - "возврат сразу, выполните предыдущую команду в фоновом режиме".