Я потратил два дня и нашел надежное решение. Я прочитал половину Интернета и пообщался в #systemd
IRC. Пожалуйста, прочитайте эту документацию, возможно, это поможет вам; для меня ничего из этого не помогло, я не мог заставить это работать.
https://www.freedesktop.org/wiki/Software/systemd/InitrdInterface/
https://www.freedesktop.org/wiki/Software/systemd/RootStorageDaemons/
В итоге мне пришлось переопределить systemd
службы, отвечающие за выключение или перезагрузку машины.
Создать каталоги переопределения:
/etc/systemd/system/systemd-poweroff.service.d
/etc/systemd/system/systemd-reboot.service.d
/etc/systemd/system/systemd-halt.service.d
И положить внутрь override.conf
файлов.
Дляpoweroff
:
[Unit]
SuccessAction=poweroff-immediate
Дляreboot
:
[Unit]
SuccessAction=reboot-immediate
Дляhalt
(вызывается, например, при использовании кнопки Power Off в Gnome):
[Unit]
ExecStart=systemctl --force --force halt
Добавление второго --force
или immediate
делает то, что он говорит. Он не ждет монтирования или других вещей, а просто перезагружает/выключает машину. Для NFS читайте -only mounts, это не опасно и может быть сделано безопасно. Кроме того, все изменения из overlay
в моей оперативной памяти также исчезнут, и это нормально. /home
, единственное, что меня волнует, будет правильно размонтировано устройством home.mount
, созданным автоматически для всех записей fstab
.
Я надеюсь, что это избавит кого-то от двух дней разочарования;)
С наилучшими пожеланиями
Камиль
bash 5.1 поставляется с загружаемым модулем CSV
BASH_LOADABLES_PATH=${BASH/\/bin\//\/lib\/}
enable -f csv csv
csv -a fields "$line"
new_line=$(IFS=$'\t'; echo "${fields[*]}")
declare -p line fields new_line
выходы
declare -- line="a,\"test, part2 \"\"the start\"\"\",b"
declare -a fields=([0]="a" [1]="test, part2 \"the start\"" [2]="b")
declare -- new_line="a test, part2 \"the start\" b"
#.....................^ tab......................^ tab
Это неверно, если есть поле, содержащее вкладку.
В трубопроводе:
IFS=$'\t'
cat file |
while IFS= read -r line; do
csv -a fields "$line"
echo "${fields[*]}"
done |
tail
Хотя это более идиоматический баш
IFS=$'\t'
while IFS= read -r line; do
csv -a fields "$line"
echo "${fields[*]}"
done < file | tail
Или используйтеcsvformat
из csvkit--этот инструмент позаботится о заключении в кавычки любого поля, содержащего разделитель :Я добавил строку во входной файл, в которой есть табуляция.
$ cat a.txt
a,"test, part2 ""the start""",b
c,d,e with tabs
$ csvformat -D $'\t' a.txt
a "test, part2 ""the start""" b
c d "e with tabs"