Я не совсем понимаю, как компьютер читает эту команду.
cat file1 file2 1> file.txt 2>&1
Если я понимаю, 2>&1
просто перенаправьте стандартную ошибку на стандартный вывод.
По этой логике команда выглядит следующим образом:
объединить файлы
file1
иfile2
.отправить
stdout
из этой операции вfile.txt
.отправить
stderr
вstdout
.конец?
Я не уверен, что делает компьютер. По моей логике команда должна быть
cat file1 file2 2>&1 > file.txt
но это не правильно.
bash
shell
command-line
io-redirection
file-descriptors
iDontKnowBetter
источник
источник
$
стенд?var=$othervar
,$
вводит имя переменной на правой стороне. В перенаправлении , как2>&1
,&
вводит номер дескриптора файла , на правой стороне. Я говорю, что вы можете думать об этом как "файл 2 равен файлу 1". (Но есть два типа равных:<
средства «для чтения» и>
средства «для записи».)Порядок перенаправления важен, и их следует читать слева направо .
Например:
command 2>&1 >somefile
означает:stderr
(а именно2
) на текущий пункт назначенияstdout
(на данный момент, терминал).stdout
перейдите наsomefile
.Таким образом, в этом случае
stderr
идет к терминалу, иstdout
идет к файлу, который не то, что вы, вероятно, хотите.С другой стороны,
command >somefile 2>&1
означает:stdout
наsomefile
stderr
в тот же пункт назначения, что иstdout
(somefile
).В этом последнем случае , как
stderr
иstdout
пойтиsomefile
, что, вероятно , что вы хотите.источник
>&
Фактически означает дубликат, он использует системный вызов dup для сопоставления нового файлового дескриптора с уже открытым файлом.Итак, вы (на самом деле bash) должны сначала открыть новый стандартный вывод, сказав: «и перенаправить стандартный поток вывода на любой установленный стандартный вывод».
источник
&
. Не могли бы вы приложить некоторые ссылки на этот синтаксис или - еще лучше - некоторые хорошие ресурсы в вышеупомянутой системе dup?