Я пытаюсь написать сценарий в bash, который автоматически добавит строку/заменит строку в /etc/rsyslog.conf при изменении сетевого шлюза. Это позволит распределить сервер rsyslog с направленным ведением журнала в конкретный файл журнала.Получение IP-адреса шлюза из сценария Bash завершается с ошибкой, но работает в терминале
Я не смог определить, почему это не удается и надеется, что кто-то с лучшим пониманием может обратиться.
Ниже приведен сценарий.
#!/bin/bash
GETGATEWAY="route -n | grep 'UG[ \t]' | awk '{print \$2}'"
echo "This is a test"
echo $GETGATEWAY
shopt -s extglob
$GETGATEWAY
Результат следует.
Это тестовый маршрут -n | grep 'UG [\ t]' | awk '{print $ 2}' Использование: route [-nNvee] [-FC] [] Список таблиц маршрутизации ядра route [-v] [-FC] {add | del | flush} ... Изменить таблицу маршрутизации для AF ,
route {-h|--help} [<AF>] Detailed usage syntax for specified AF. route {-V|--version} Display version/author and exit. -v, --verbose be verbose -n, --numeric don't resolve names -e, --extend display other/more information -F, --fib display Forwarding Information Base (default) -C, --cache display routing cache instead of FIB
= использовать '-A' или '-'; default: inet Список возможных семейств адресов (которые поддерживают маршрутизацию): inet (DARPA Internet) inet6 (IPv6) ax25 (AMPR AX.25) netrom (AMPR NET/ROM) ipx (Novell IPX) ddp (Appletalk DDP) x25 (CCITT X.25)
Если скопировать эхо строку после «Это тест» и вставить на терминале для выполнения, он работает, как ожидалось. route -n | grep 'UG [\ t]' | awk '{print $ 2}'
Я пробовал несколько вариантов оболочки с и без магазина -s extglob.
Само использование дополнительной _pipe_ и '' grep', когда маршрут -n | awk '/ UG [\ t]/{print $ 2}' производит те же результаты, что и 'route -n | grep 'UG [\ t]' | awk '{print $ 2}' 'делает! – user3439894