У меня точно такая же проблема. wpa _Заявитель больше не подключается к eduroam
Мы должны попытаться выяснить, какое обновление пакета вызвало эту ошибку, и либо вернуть предыдущую версию, либо исправить ее.
Обновление :Я обнаружил, что 25 ноября libssl был обновлен в debian testing/unstable до версии 1.1.1a -1. Вместо этого wpasupplicant не обновлялся с августа.
Я попытался понизить версию обоих, и на самом деле проблемным оказался wpasupplicant. Попробуйте установить более старую версию по:
sudo apt-get install wpasupplicant=2:2.4-1+deb9u2
, затем отметьте его нажатием:
sudo apt-mark hold wpasupplicant
awk 'function prnt(type, pr){ print pr >"concatenated_"type".txt"; };
FNR==1{ type="load";
if (!path) {
path=FILENAME; sub("[^/]+$","",path);
prnt(type, "push(\"<"path">\")$");
};
prnt(type,"\tload(\"<"FILENAME">\")$");
};
/START HEADER/{ prn=1; type="header"; next; };
/START SCRIPT/{ prn=1; type="script"; next; };
/END SCRIPT/ || /END HEADER/{ prn=0; };
prn{ prnt(type, $0); }' /home/User/Unix/*.mac
Мы определили awk функцию; prnt
- это его имя и с двумя параметрами, один используется для получения короткой строки и используется как часть имени выходного файла, в которое должны быть записаны строки, где эта строка исходит из параметра pr
.
function prnt(type, pr){ print pr >"concatenated_"type".txt"; }
Значение параметра type
изменяется условно; если это первая строка ввода FNR==1
, мы устанавливаем type="load"
для записи имени и пути к файлам, но путь следует записывать только один раз, поэтому мы использовали if(!path) { path=FILENAME;...; }
, чтобы убедиться, что он запишет один раз (в следующий раз переменная path
уже принимает значение, поэтому блок внутри оператора if не будет выполняться для части пути снова ). для остальных входных данных мы будем писать только имя файла, и это также делается один раз для каждого файла, когда FNR==1
.
если строка содержит /START HEADER/
, мы устанавливаем type="header"
и, соответственно, мы устанавливаем type="script"
, когда она соответствует строке с /START SCRIPT/
; мы также использовали флаг управляющей переменной prn=1
, чтобы контролировать, когда вызывать нашу функцию для печати строк в выделенное имя файла с помощью prn{ prnt(type, $0); }
.
next
используется, чтобы начать сначала и прочитать следующую строку ввода,поэтому он не будет выполнять следующие команды и не будет записывать заголовок -начало -строку строки в выводе.
также мы сбрасываем флаг prn=0
, чтобы избежать печати заголовка -конца -строки строки.
$ cat tst.awk
BEGIN {
out["HEADER"] = "Concatenated_Header.txt"
out["SCRIPT"] = "Concatenated_Script.txt"
out["LOAD"] = "Concatenated_Load_Commands.txt"
}
FNR == 1 {
if ( NR == 1 ) {
dir = FILENAME
sub("/[^/]+$","",dir)
printf "push(\"%s\")$\n", dir > out["LOAD"]
}
printf " load(\"%s\")$\n", FILENAME > out["LOAD"]
}
block {
if ( index($0,"/* END ") == 1 ) {
block=""
}
if ( block in out ) {
print > out[block]
}
next
}
index($0,"/* START ") == 1 { block=$3; next }
$ awk -f tst.awk $PWD/*.mac
$ head Concat*
==> Concatenated_Header.txt <==
Header 1 Content
Header 2 Content
==> Concatenated_Load_Commands.txt <==
push("/home/foo/tmp")$
load("/home/foo/tmp/01_FileName.mac")$
load("/home/foo/tmp/02_FileName.mac")$
==> Concatenated_Script.txt <==
Script 1 Content
Script 2 Content
Если вы хотите создать выходной файл и для комментариев, просто добавьте строку out["COMMENTS"] = "Concatenated_Comments.txt"
в секцию BEGIN
. То же самое для всего остального, для чего вы создаете блоки START
... END
. Обратите внимание, что скрипт ищет только /* START
вне блоков и /* END
внутри них, оба только в начале строк, поэтому эти строки могут появляться внутри ваших блоков текста без нарушения скрипта.