Ich versuche, ein Skript in bash zu schreiben, die eine Zeile automatisch hinzufügen werden/eine Zeile in /etc/rsyslog.conf ersetzen, wenn die Netzwerk-Gateway Änderungen. Dies würde die Verteilung eines rsyslog-Servers mit direkter Protokollierung in eine bestimmte Protokolldatei ermöglichen.Beziehen Gateway-IP von Bash-Skript fehlschlägt, funktioniert aber im Terminal
Ich konnte nicht feststellen, warum dies fehlschlägt und hoffe, dass jemand mit einem besseren Verständnis ansprechen kann.
Folgendes ist das Skript.
#!/bin/bash
GETGATEWAY="route -n | grep 'UG[ \t]' | awk '{print \$2}'"
echo "This is a test"
echo $GETGATEWAY
shopt -s extglob
$GETGATEWAY
Ergebnis folgt.
Dies ist eine Testroute -n | grep 'UG [\ t]' | awk '{print $ 2}' Verwendung: route [-nNvee] [-FC] [] Kernel-Routingtabellen auflisten route [-v] [-FFC] {hinzufügen | del | flush} ... Routing-Tabelle für AF ändern .
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' oder '-' verwenden; Standard: inet Liste der möglichen Adressfamilien (die Routing unterstützen): inet (DARPA Internet) inet6 (IPv6) ax25 (AMPR AX.25) netrom (AMPR-NET/ROM) ipx (Novell IPX) ddp (Appletalk DDP) x25 (CCITT X.25)
Wenn Sie die Echo-Zeile kopieren, nachdem „Dies ist ein Test“ und auf dem Terminal einfügen auszuführen, es funktioniert wie erwartet. route -n | grep 'UG [\ t]' | awk '{print $ 2}'
Ich habe mehr Shell-Optionen versucht, mit und ohne shopt es extglob.
Unnötig Verwendung eines zusätzlichen _pipe_ und 'grep' wenn' route -n | awk '/ UG [\ t]/{print $ 2}' 'erzeugt die gleichen Ergebnisse wie' route -n | grep 'UG [\ t]' | awk '{print $ 2}' tut es! – user3439894