awk '{
##use key-value array in awk
if($1 in STORE){
if($3 ==0){
STORE[$1]+=1
} ##if ends for 3rd column check
} ##if ends for A/B check
else{
if($3 ==0){
##check if third column is zero
STORE[$1]=1
}else{
##if not zero, make value as zero
STORE[$1]=0
}
} ##else if A/B not in Store
}
END{
##print everything using for loop
for(key in STORE){
print key, STORE[key]
}
} ' file.txt
Кажется, что правильный порядок после plymouth-quit.service
, но до display-manager.service
, который является последним юнитом, запущенным перед plymouth-quit-wait.service
. т. е. если включено, диспетчер отображения запускается до того, как экран-заставка исчезнет.
Таким образом, чтобы обойти plymouth без добавления переопределений в службу диспетчера отображения, обходным путем является запуск новой службы на tty2
и переключение виртуального терминала на tty2
в сценарии.
[Unit]
Requires=network-online.target
After=network-online.target plymouth-quit.service
Before=display-manager.service
[Service]
Type=oneshot
StandardInput=tty
StandardOutput=tty
StandardError=tty
TTYPath=/dev/tty2
TTYReset=yes
TTYVHangup=yes
ExecStart=/path/to/script.sh
[Install]
WantedBy=multi-user.target
#!/bin/bash
# Change the virtual terminal to tty2
# so user can interact with the script and see its output
chvt 2
# do stuff
echo "Hello, world!"
# Change back to tty1
# so user is shown console login,
# or sent to wherever the display manager decides
chvt 1
Это работает, но не очень чисто без добавления дополнительной логики в сценарий или написания оболочки. Если я запускаю его где угодно, кроме tty1
, например (, как рабочий стол, работающий на tty7
), или если tty2
уже занят.
Это должно быть нормально, так как мой скрипт должен запускаться только при загрузке, но если есть чистое системное решение, которое позволило бы мне просто держать все включенным tty1
все время, когда default.target
равно multi-users.target
или graphical.target
, я хотел бы услышать об этом.