В этом коде куча проблем.Я думаю, что главное, чего вам не хватает, это то, что вам нужно $( )
для захвата вывода одной команды, чтобы вы могли использовать его в качестве аргумента для другой команды (и вам обычно нужны двойные кавычки вокруг этого, чтобы избежать неожиданного разбора),То, как вы это написали, openssl rand -hex6
не рассматривается как команда, просто как еще три аргумента для sudo ifconfig
(и это вывод из sudo ifconfig
, который передается в sed
).
Вам также нужен пробел в -hex 6
, а в конце команды sed
используются несовместимые разделители и отсутствует закрывающая кавычка.Кроме того, вместо использования группы захвата в первой команде sed
, вы можете просто использовать &
, чтобы получить всю совпадающую строку (т. Е. s/../&:/g
).
Вот исправленная версия:
sudo ifconfig en0 ether "$(openssl rand -hex 6 | sed 's/../&:/g;s/:$//')"
РЕДАКТИРОВАТЬ: как отметил @Cyrus в комментарии, пространство MAC-адресов подразделяется на глобально-локально управляемое и uncast-против многоадресного (см. Wikipedia ).Использование многоадресного адреса может вызвать проблемы, поэтому было бы лучше сделать так, чтобы вторая цифра была четной.Это немного сложно, поэтому я собираюсь уклониться от вопроса, как это сделать ...