Технически, это не использовать **ваш** Mac-адрес или точки доступа **идентификаторы SSID**, он использует точки доступа **МАС-адрес** - что такое mac-адрес **беспроводной интерфейс**. (Интерфейс маршрутизатора локальных сетей будут иметь разные MAC-адреса.) @0xC0000022L: никто не "держит меня" от этого, но ответить конкретно предлагает "хозяев", и до сих пор 4 человека поставили плюс за коммент vinc17 выражает боль, вызванную "вдруг на IPv6". Готовится к IPv6-это не всегда проблема: многие программы нужен способ, чтобы определить, являются ли два имени/адреса ссылаются на один и тот же узел. Они могут использовать простой пример сравнения строк, или они должны знать много о сети, чтобы найти "истинный" ответ. Последний представляет собой минное поле, столько 3-сторонних программ и систем ... что у меня нет контроля над ... использовать первый способ.

Вашего согласия не сделает ФД 3 копия ФД 1 и ФД 3 будет указывать на стандартный вывод и что на ней пойдет (по умолчанию) телетайп. Вы потом перенаправить ФД 1 в /dev/нуль, так что все, что написано на FD 1, будут отменены. Потому что греп не пишут ФД 3, ничего не видно с ней происходит.

Это происходит в последовательности: сначала копию (dup2) ФД 1 к ФО 3, так что ФД 3 отныне указывает на то, что ФД 1 в настоящее время указывает на, а во-вторых ФД 1 заменяется на указатель на /dev/нуль.

Конечный результат показан в следующей диаграмме:

Diagram of redirections 3>&1 1>/dev/null

Стандартная ошибка (в розовом, ФД 2) и ФД 3 на телетайп, и стандартный вывод в /dev/нуль. ФД 3 по-прежнему указывает на телетайп, потому что там ФД 1 указано, когда была сделана копия. Тем не менее, команда grep команда не попробовать написать что-нибудь ФД 3, так что копия никогда не станет использовать.

"Копирование" - это направления: после 3>&1 обрабатывается, все, что написано на FD 3 пойдет туда, где ФД 1 указывает на время обработки. Это не "сохранить" ничего, кроме этого: если вы впоследствии перенаправить ФД 1, все записываемые в него переходит к новому месту. Что вы сделали держалась первоначального назначения ФД 1 в случае, если вы хотели использовать его в дальнейшем. Только переадресация, которая влияет, где команда grep's стандартный выходной заканчивается одним 1>... что явно говорит о том, куда он идет.

Если грэп были писать на FD 3, он будет отображаться в терминале, как ожидалось. Потому что он только выводит на FD 1, Как правило, все ее фактический выход отбрасываются.


Мы могли бы сделать команда grep выводит на FD 3, Если мы хотели:

( грэп "..." >&3 )

Что будет взять обычный выход на ФД 1 и (вновь созданный) ФД 3 вместо. Это не будет работать, если вы запустите его напрямую, потому что ФД 3 никуда не ходит, но мы можем включить его в что-то подобное, что позволяет использовать его:

( греп "..." >&3 ) 3>&1 1>/dev/нуль

Команды в скобках выходы ФД 3. Перенаправление после 1) пункт 3 ФД (которые теперь фактически имеет на него содержимое) на ФД 1 и 2), то прямые ФД 1 км снова (который не имеет никакого эффекта). Конечный результат заключается в том, что вы получите грэп "..." стандартный вывод снова, именно там, где это было бы без всякой суеты.

Практическое использование такого рода редирект как-то так

УМК 3>&1 1>&2 2>&3 3>&- | фу

который меняет соб 1 и 2, используя ФД 3, как временное место хранения. Это также иногда используется для shell-скрипт хитрости, как притворяется процесс замещения в POSIX SH с ( cmd1 | ( cmd2 | ( main_command /Дев/ФД/3 /Дев/ФД/4 ) 4<&0 ) 3<&0 ). В противном случае, это довольно редкое, что команды изначально использовать любые нестандартные дескриптор файла по номеру (конечно много открыть файл сами и сделать один).