Какие команды и параметры кикстарта нельзя% включить?

Если количество точек данных (я принимаю) в каждом из Ваших экспериментов (снова, я принимаю) всегда равняется 4, можно использовать эту остроту Perl:

perl -ple '$. % 4 == 1 and print "Exp", ++$i' your_file

Как это работает

  • -p переключатель говорит Perl циклично выполняться по данному файлу (файлам) линию за линией (по умолчанию) и печатать каждую строку после выполнения безотносительно кода, который Вы предоставляете.
  • -l переключатель говорит Perl автоматически добавлять новую строку (по умолчанию) каждому print оператор.
  • -e переключатель сообщает Perl что независимо от того, что прибывает после того, как это - код для выполнения (код, который будет выполнен перед, каждая строка файла печатается).
  • Специальная переменная $. содержит номер строки, в настоящее время обрабатываемый. Если тот номер строки является конгруэнтным 1 4 по модулю ($. % 4 = 1) это означает, что мы должны вставить Exp # перед ним.
  • Таким образом, мы тестируем $. % 4 == 1 и если это верно, мы печатаем Exp ++$i\n (где \n был добавлен -l переключатель). Это работает, потому что неопределенной переменной дает значение нуля Perl, когда это сначала используется в качестве целого числа.

Заставить его работать с несколькими файлами

  • $. переменная не сбросит свое значение при обработке нескольких файлов сразу. Очевидно, это не то, что Вы хотите. Можно работать вокруг этого путем явного выписывания неявного цикла, созданного -p в вышеупомянутой остроте, таким образом, можно управлять continue блок.

    perl -le '
        while(<>){
            $. % 4 == 1 and print "Exp ",++$i
        } continue {
            print;             # Print the current line
            if(eof){           # If the next line is the end-of-file
                close ARGV ;   # Close the current filehandle to reset $.
                $i = 0     ;   # Reset the experiment counter if you need
            }
        }
    ' list_of_your_files
    

Примечания

  • Оба из вышеупомянутых решений распечатают измененный файл (файлы) к стандартному выводу. Чтобы эмулировать редактирование на месте (т.е. отредактировать сами файлы), добавьте a -i переключатель:

    perl -pi -le '$. % 4 == 1 and print "Exp", ++$i' your_file
    
    • Продолжите двигаться так же для другого решения.
    • Удостоверьтесь, что Вы не помещаете другой переключатель непосредственно после -i поскольку это интерпретирует что-либо после него как расширение использования для создания файла резервной копии.

    • Я рекомендую протестировать без -i сначала и затем добавьте его, если результаты являются удовлетворительными.

3
21.04.2019, 20:49
1 ответ

Некоторые команды кикстарта представляют задачи установки, которые должны быть выполнены до запуска основного установщика, поэтому они обрабатываются только внутри dracut. Те, о которых я знаю, это:

  • Установите режим отображения :text, graphical,cmdline
  • Загрузить диски с драйверами:driverdisk
  • Загрузить обновления установщика:updates
  • Проверить установочный носитель:mediacheck

Таким образом, они, вероятно, не будут работать в %include, если цель %includeне видна внутри dracut(, например, если вы внедрили ее в initrd или поместили на то же устройство, что и кикстарт...)

Если вам нужно использовать один из них, но он не может быть в основном кикстарте, вы можете попробовать вместо этого использовать соответствующие параметры загрузки :

  • Установите режим отображения :inst.text, inst.graphical,inst.cmdline
  • Загрузить диски с драйверами:inst.dd=<url>
  • Загрузить обновления установщика:inst.updates=<url>
  • Проверить установочный носитель:rd.live.check
2
27.01.2020, 21:27

Теги

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