Нет, но ваш сценарий будет переносимым до тех пор, пока вы избегаете любого начального пробела. Почему ? Поскольку некоторые sed
удаляют пустые символы из текстовых строк, и единственный способ избежать этого - избежать начального пробела, как объясняют эти страницы руководства, относящиеся к прошлому веку: 1 , 2 , 3
То же самое касается BSD
sed
( OSX
просто скопировал код, это не их расширение), и если вы проверяете архивы и читаете страницу man
из BSD 2.11
, это довольно ясно:
(1) i \
text
.......
Аргумент, обозначенный текст , состоит из одной или нескольких строк, все, кроме последней, заканчиваются на'\'
, чтобы скрыть новая линия. Обратные косые черты в тексте обрабатываются как обратные косые черты в строке замены команды'
и могут использоваться для защиты начальных пробелов и вкладок от удаление, которое выполняется в каждой строке скрипта.
А где это задокументировано в спецификации POSIX? Он только говорит
. Текст аргумента должен состоять из одной или нескольких строк. Каждому встроенному
в тексте должен предшествовать . Остальные символы в тексте должны быть удалены, а следующий символ должен рассматриваться буквально.
и если вы прокрутите вниз под ОБОСНОВАНИЕ , появится
Требования к разрешению символов
и в командных строках стали более явными, чем в ранних предложения четко описать историческую практику и устранить путаницу в отношении фразы "защитить начальные пробелы [sic] и табуляции от удаления , которое выполняется в каждой строке скрипта", появляется в большей части исторической документации описания текста утилитой sed. (Известно, что не во всех реализациях были удалены символы из текстовых строк , хотя во всех них разрешены ведущие символы перед адресом в командной строке. )
Так как часть с «обратная косая черта может использоваться, чтобы» не была включена в эту цитату, оставшаяся фраза «защищает начальные пробелы ...» не делает никаких смысл ... 1
В общем, подведем итог: некоторые реализации удаляли (а некоторые до сих пор это делают) убирают пробелы из текстовых строк. Однако, поскольку спецификация POSIX, которой должны соответствовать все реализации, говорит
Другие символы в тексте должны быть удалены, а следующий за ним символ должен рассматриваться буквально.
мы можем сделать вывод, что переносимый способ отступа строк в тексте, который нужно вставить, заключается в экранировании начального пробела в каждой из этих строк.
1: Я также не понимаю, почему OSX
/ BSD
люди изменили весь абзац на странице man
без изменения исходного кода - вы получить то же поведение, что и раньше, но раздела man, который документирует этот материал, больше нет.
Создать файл ниже, если его нет
nano /etc/udev/rules.d/70-persistent-net.rules
добавить строку ниже
# interface with MAC address "00:0c:30:50:48:a1" will be assigned "eth0"
# KERNEL=="enp3s0" is debians current interface name
# NAME="eth0" is a new ethernet interface name
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:30:50:48:a1", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="enp3s0", NAME="eth0"
Я нашел очень простой способ, изменив только/etc/network/interfaces
:
rename enp3s0=wan0
Тогда
service networking restart
для перезапуска сетевой службы.
В наши дни systemd.link -Конфигурация сетевых устройств предлагает удобный способ постоянного переименования интерфейсов.