Альтернативный способ настройки IP-адреса

perl -MFatal='open,close' -ali -ne '
   if ( @ARGV ) { # FileB readin
      if ( $. == 1 ) { push @names, @F;      }
      else           { push @A, join $/, @F; }
      print;
   } else { # FileA readin
      if ( $. == 1 ) {
         open FILEC, ">", "FileC.out";
         print FILEC $_;
         print;
         @remap =
            map {
               my $n = $names[$_];
               grep { $n eq $F[$_] } 0.. $#F;
            } 0..$#names;
      } else {
         my $n = join $/, @F[@remap];
         if ( grep { $n eq $_ } @A ) { print FILEC $_; }
         else                        { print;          }
      }
   }
   eof and $. = 0;
   eof() and close FILEC;
' FileB FileA

Пояснение

  • Мы передаем 2 файла 'FileB' и 'FileA' в указанном порядке в командную строку Perl.
  • Во время чтения FileB мы делаем 2 вещи в зависимости от того, находимся ли мы на первой или какой-то другой строке :
    • Для первой строки FileB мы сохраняем имена полей FileB в массив @names.
    • Для других строк мы заполняем массив @Aполями, соединенными новой строкой \n, предоставленными через $/, который по умолчанию является RS.
    • В любом из этих случаев мы выводим строки в STDOUT, чтобы FileB считывался неразрушающим образом в режиме Perl's -i.
  • Теперь, когда мы читаем файл A, в его первой строке откройте дескриптор файла записи FILEC, чтобы мы могли заполнить файл FileC.out.
    • Мы печатаем в STDOUT, так как хотим сохранить эту строку в FileB.
    • Мы также печатаем в дескриптор файла FILEC, так как мы хотим, чтобы заголовок также попадал в FileC.out.
    • Теперь это решающий шаг, на котором отображение полей FileB отображается на поля FileA.
  • Для не -первых строк в FileA мы выполняем проверку на равенство этих переназначенных полей с уже сохраненными данными из FileB в массиве @A.
  • Если совпадение найдено, запишите эту строку в FileC.out, но НЕ записывайте в FileA. В случае, если совпадение не найдено,затем мы пишем в FileA, но НЕ в FileC.out.
  • При завершении любого из файлов мы сбрасываем счетчик строк $.на 0, чтобы можно было выполнить первую проверку равенства строк для обоих файлов.
  • После обнаружения финального eof (через eof ())мы закрываем дескриптор файла FILEC.
  • В модуль Fatal.pmзагружаются функции openи closeдля автоматического -выхода при этих операциях.
0
16.10.2019, 13:45
1 ответ

ifupdownНабор скриптов не предназначен для такой работы.

Вместо этого вы можете:

  1. Прекратите использовать ifupdownи настройте сеть самостоятельно с помощью специального скрипта. (я бы, наверное, выбрал этот вариант)
  2. Используйте функцию post-upфункции ifupdown, таким образом:
iface eth0 inet static
  pre-up ifconfig eth0 hw ether `cat /root/macaddress`
  address 0.0.0.0
  netmask 255.255.255.0
  post-up ifconfig eth0 `cat /root/ipaddress`

Обратите внимание, что я не проверял, может ли post -up управлять конструкцией обратной кавычки...

Может быть, вы также можете покопаться в методах manual(вместо static)...

0
28.01.2020, 03:11

Теги

Похожие вопросы