Как настроить Debian для одновременной связи в разных сетях при загрузке?

Вам не нужно sedдля удаления не -буквенных символов из значения переменной в bash. Простая замена переменной сделает то же самое:

PROJECT_DB_NAME=${var//[![:alpha:]]}

Если вы хотите использовать [!a-zA-Z]вместо [![:alpha:], то это, конечно, также возможно.

Если вы действительно хотите использовать внешнюю команду для удаления этих символов, используйте более легкий -вес tr, а не sed. Задача trкак раз и состоит в том, чтобы делать такие вещи, как эти (односимвольные транслитерации ).

PROJECT_DB_NAME=$( tr -dc '[:alpha:]' <<<"$var" )

или,

PROJECT_DB_NAME=$( printf '%s\n' "$var" | tr -dc '[:alpha:]' )

См. руководство по команде tr.

Обратите внимание, что использование echoможет изменить содержимое переменной до того, как sedее увидит. См. вопрос "Почему printf лучше, чем echo? ".


Ваш первый фрагмент кода,

PROJECT_DB_NAME=`sed -i "${var}"'s/[^a-zA-Z]//g'`

запустит sedбез имени файла. Это заставляет sedпредположить, что данные поступают через стандартный ввод. Опция -i, как говорится в сообщении об ошибке, не может использоваться со стандартным вводом. Кроме того, вы добавляете перед кодом sedзначение переменной. Это заставит значение переменной интерпретироваться как команды редактирования sed.

Ваш второй фрагмент кода,

PROJECT_DB_NAME=`"$var" | sed -n 's/[^a-zA-Z]//g'`

Это пытается запустить "$var"как команду на левой стороне конвейера. Кроме того, вы используете sed -n, что приведет к тому, что sed- , а не будут выводить измененные данные по умолчанию.

1
05.05.2021, 04:56
1 ответ

Вы получаете сообщения об ошибках от RTNETLINK, потому что делаете лишние действия.

Давайте взглянем на вашу первую сетевую строфу:

# The primary network interface
allow-hotplug enp2s0
iface enp2s0 inet static
    address 10.10.10.83
    gateway 10.10.10.1
    # dns-* options are implemented by the resolvconf package, if installed
    dns-nameservers 10.10.10.1
    up route del default gw 10.10.10.1

Вы устанавливаете IP-адрес (и полностью опускаете сетевую маску/сетевой адрес, что является неаккуратным и заставляет систему предполагать, что это /8 из-за адреса 10., но если это сработает для вас, пусть будет так ), определите шлюз по умолчанию, а затем сразу же добавьте -вверх, удалив шлюз по умолчанию.

(Почему вы все равно делаете это вместо того, чтобы просто не добавлять шлюз, начинающийся с ?)

Когда вы вызываете ifdown enp2s0, он просматривает определение интерфейса и пытается удалить шлюз по умолчанию, прежде чем деактивировать интерфейс, потому что так работает ifupdown, но поскольку вы уже удалили этот маршрут, RTNETLINK сообщает ему, что он не может его найти. маршрут, чтобы удалить его, и процесс завершается сбоем.

То же самое происходит и во второй строфе:

iface wlx0013eff5755b inet static
    address 192.168.1.83
    gateway 192.168.1.1
#   # dns-* options are implemented by the resolvconf package, if installed
    dns-nameservers 192.168.1.1
    up route add default gw 192.168.1.1

(Опять же, нет сетевой маски, но 192.168.x.xопределяется как набор /24частных подсетей, поэтому снова система делает предположение. Опять же, я бы рекомендовал быть явным здесь.)

Вы определяете шлюз по умолчанию,а на -up явным образом попытаться добавить шлюз по умолчанию еще раз . RTNETLINK сообщает вам, что этот маршрут уже существует, и сценарий снова дает сбой.

Удалите обе записи upи запись gatewayпервой строфы, и это, вероятно, сработает. Я не могу с уверенностью сказать вам, что он будет делать то, что вы хотите, потому что довольно неясно, что вы на самом деле описываете, а файл interfacesчертовски неоднозначен, потому что я подозреваю, что вы просто скопировали то, что вам на самом деле не нужно. пытаясь понять.

0
28.07.2021, 11:34

Теги

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