Изменения в языке сценариев оболочки bash?

Возможно, эквивалент udev(eudevилиmdevсогласно Devuan)не ведет себя на 100 % одинаково в отношении событий горячего подключения. Также возможно, если вы используете коммутатор, который имеет очень большую задержку переадресации, прежде чем фактически разрешить трафику работать в обоих направлениях (, в этом случае второе решение ниже не будет работать ).

В любом случае, если вы хотите, чтобы интерфейс был ненастроенным, это должно быть довольно просто. Вот два или три предложения от самого простого к более сложному:

  1. исключить интерфейс из конфигурации

    1.1. просто измените настройки сети по умолчанию в/etc/default/networking:

    либо

    CONFIGURE_INTERFACES=no
    

    это несколько экстремально, так как даже loне будет запущено, что, возможно, не позволит даже некоторым несетевым -приложениям работать должным образом (gdm... ).

    1.2. или

    EXCLUDE_INTERFACES=eth0
    

    , чтобы исключить только проблемный интерфейс.

    Позже вы можете использовать ifup eth0, чтобы вызвать его.

  2. Или вместо этого вы можете добавить условие в конфигурацию, чтобы проверить, доступна ли ссылка,и "сбой" интерфейса, если нет. Поскольку я не уверен, запускается ли хук 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позже, после подключения кабеля.

0
13.02.2019, 02:56
2 ответа

Следующее работает для меня, возвращая true, если нажато «просто введите», или любое количество пробелов, или несколько вкладок. Любые буквенно-цифровые и т. д. возвращают false.

if [ -z $VAR ]
then
..... do your backup stuff here
else
  "ok, not backing up"
fi

FWIW Я бы изменил приглашение, чтобы сделать его более понятным: «просто нажмите Enter, чтобы запустить резервное копирование, любой символ (s )для выхода»

0
28.01.2020, 02:14

Ваша проблема находится в самой первой строке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, который не понимает конструкцию [[ ]].

Уберите этот пробел, и все будет хорошо.

7
28.01.2020, 02:14

Теги

Похожие вопросы