mkdir -p "$ @"
создать все каталоги, имена которых передаются в качестве аргументов ( $ @
).
Параметр -p
позволяет рекурсивно создавать каталоги, если они находятся в несуществующих каталогах.
eval cd "\" \ $$ # \ ""
просто перейдите в последний каталог: $ #
даст вам номер переданного аргумента, таким образом \ $$ #
предоставит вам последний аргумент (то есть: последнее имя каталога, которое вы передали в качестве аргумента). Например, если есть три аргумента, $ #
равно 3
, поэтому eval
запускает команду cd "$ 3"
.
На самом деле команда должна была быть eval cd "\" \ $ {$ #} \ ""
. Фигурные скобки необходимы во многих оболочках, когда аргументов на 10 больше, потому что многие оболочки рассматривают что-то вроде "$ 10"
как значение параметра 1, за которым следует символ 0
, а не как значение параметра 10.
Одно отношение это udevadm settle
в выводеsystemctl cat networking
:
ExecStartPre=-/bin/sh -c '[ "$CONFIGURE_INTERFACES" != "no" ] && [ -n "$(ifquery --read-environment --list --exclude=lo)" ] && udevadm settle'
Подумайте, что man udev
говорит о ключе RUN
:
This can only be used for very short-running foreground tasks. Running an event process for a long period of time may block all further events for this or a dependent device.
Starting daemons or other long-running processes is not appropriate for udev; the forked processes, detached or not, will be unconditionally killed after the event handling has finished.
Ответ Ференца дал мне понять, что проблема может быть связана с моими собственными скриптами.
На самом деле, сценарии должны переключать GPU и перезапускать X-сервер (LightDM )каждый раз, когда я подключаю/отключаю свой ноутбук.
Итак,кажется, что udev выполнил сценарии во время загрузки, поэтому они пытались перезапустить X и, очевидно, потерпели неудачу.
Я добавил следующий код в начало моего onbat.sh
/ onchg.sh
, и теперь все работает отлично:
# Check if LightDM has already arrived
systemctl status lightdm | grep "running"
not_running=$?
if (( $not_running > 0 ))
then
# LightDM not arrived, exiting for now...
echo "LightDM not arrived, won't switch GPU."
exit
fi