Возможно, эквивалент udev
(eudev
илиmdev
согласно Devuan)не ведет себя на 100 % одинаково в отношении событий горячего подключения. Также возможно, если вы используете коммутатор, который имеет очень большую задержку переадресации, прежде чем фактически разрешить трафику работать в обоих направлениях (, в этом случае второе решение ниже не будет работать ).
В любом случае, если вы хотите, чтобы интерфейс был ненастроенным, это должно быть довольно просто. Вот два или три предложения от самого простого к более сложному:
исключить интерфейс из конфигурации
1.1. просто измените настройки сети по умолчанию в/etc/default/networking
:
либо
CONFIGURE_INTERFACES=no
это несколько экстремально, так как даже lo
не будет запущено, что, возможно, не позволит даже некоторым несетевым -приложениям работать должным образом (gdm... ).
1.2. или
EXCLUDE_INTERFACES=eth0
, чтобы исключить только проблемный интерфейс.
Позже вы можете использовать ifup eth0
, чтобы вызвать его.
Или вместо этого вы можете добавить условие в конфигурацию, чтобы проверить, доступна ли ссылка,и "сбой" интерфейса, если нет. Поскольку я не уверен, запускается ли хук dhcp
до или после того, как пользователь -предоставил команды up
, я обманываю и помещаю его в pre-up
, что требует предварительного запуска интерфейса вручную. Вы можете проверить, достаточно ли хороша команда up
, не вызывая ее сначала.
Отредактируйте соответствующую часть /etc/network/interfaces
, чтобы она выглядела так:
allow-hotplug eth0
iface eth0 inet dhcp
pre-up ip link set eth0 up && sleep 1
pre-up [ $(cat /sys/class/net/eth0/carrier) -eq 1 ]
iface eth0 inet6 auto
pre-up ip link set eth0 up && sleep 1
pre-up [ $(cat /sys/class/net/eth0/carrier) -eq 1 ]
(скорее всего не нужен для настроек ipv6, это наверное экономит 1с. Вы можете даже удалить весь раздел inet6, если не заинтересованы)
Возвращаемый результат теста заставит ifup
считать конфигурацию неудачной и оставит логическую(ifupdown
точку зрения )состояния карты отключенной.
Затем вы можете ввести ifup eth0
или service networking restart
позже, после подключения кабеля.
Следующее работает для меня, возвращая true, если нажато «просто введите», или любое количество пробелов, или несколько вкладок. Любые буквенно-цифровые и т. д. возвращают false.
if [ -z $VAR ]
then
..... do your backup stuff here
else
"ok, not backing up"
fi
FWIW Я бы изменил приглашение, чтобы сделать его более понятным: «просто нажмите Enter, чтобы запустить резервное копирование, любой символ (s )для выхода»
Ваша проблема находится в самой первой строкеMain2Network1.sh
:
#!/bin/bash
#renames files changed files on NETWORK to _day_mnth_yr_NETWORK1 then puts maincomp version of file on network.
Видите пустое место в начале? Это превращает вашу строку shebang в просто еще один комментарий, поэтому ядро по умолчанию запускает ваш скрипт с /bin/sh
, который не понимает конструкцию [[ ]]
.
Уберите этот пробел, и все будет хорошо.