Во многих местах я встречал людей, предлагающих заменить stderr на stdout следующим образом:
Команда 3> & 2 2> & 1 1> & 3
Это смотрит назад на меня. Если мы отправим 3 в 2, а затем сразу же отправим 2 в 1 (что теперь будет выглядеть как отправка 3 и 2 в 1). Я думаю, что есть что-то базовое, чего я не понимаю в перенаправлении ввода-вывода, но я не могу найти ничего, что проясняет это.
2 ответа
Подробное объяснение можно найти на странице http: //www.catonmat .net / blog / bash-one-liners -olated-part-three /, раздел 21:
$ command 3> & 1 1> & 2 2> & 3 Здесь мы сначала дублируем файловый дескриптор 3, чтобы он стал копией stdout. Затем мы дублируем stdout, чтобы он был копией stderr, и, наконец, мы дублируем stderr, чтобы он был копией файлового дескриптора 3, который является stdout. В результате мы поменяли местами stdout и stderr.
Более подробную информацию и изображения можно найти по ссылке. Ключевой вывод:
3>&1
означает «3 точки туда, куда указывает 1». Затем 1>&2
говорит: «теперь 1 указывает туда, куда указывает 2» (1 теперь указывает на поток 2, но 3 не следует ...), и, наконец, 2>&3
говорит: «теперь 2 указывает на то, где 3 указывает (это поток 1).
Графически (но см. Ссылку - намного лучше, чем мой ascii-art):
0 --> /dev/tty0
1 --> /dev/tty1
2 --> /dev/tty2
После 3>&1
:
0 --> /dev/tty0
1 --> /dev/tty1
2 --> /dev/tty2
3 --> /dev/tty1
После 1>&2
:
0 --> /dev/tty0
1 --> /dev/tty2
2 --> /dev/tty2
3 --> /dev/tty1
После 2>&3
:
0 --> /dev/tty0
1 --> /dev/tty2
2 --> /dev/tty1
3 --> /dev/tty1
Как видите, 1
и 2
поменялись местами. По той же ссылке рекомендуется закрыть временный поток 3
с помощью 3>&-
Ха, я никогда такого не видел .... во всяком случае ... кажется, что, по сути, сначала говорится ... отправь 3 на адрес 2 .... затем отправь 2 на адрес 1 .... затем отправьте один на адрес 3 ... который с первого шага, как мы знаем, является исходным адресом двух ... так что вы поменяли их местами ...
Похожие вопросы
Новые вопросы
stdout
Стандартный поток вывода (stdout) - это поток, в который программа записывает свои выходные данные.