【发布时间】:2017-02-21 02:56:36
【问题描述】:
我正在尝试在 bash 中编写一个脚本,当网络网关更改时,它将自动在 /etc/rsyslog.conf 中添加一行/替换一行。这将启用 rsyslog 服务器的分发,并将定向日志记录到特定日志文件。
我无法确定为什么会失败,希望有更好理解的人可以解决。
以下是脚本。
#!/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'或'--';默认值:inet 可能的列表 地址族(支持路由): inet (DARPA Internet) inet6 (IPv6) ax25 (AMPR AX.25) netrom (AMPR NET/ROM) ipx (Novell IPX) ddp (Appletalk DDP) x25 (CCITT X.25)
如果您在“这是一个测试”之后复制回显行并粘贴到终端上执行,它会按预期工作。 路线-n | grep 'UG[ \t]' | awk '{print $2}'
我尝试了多个 shell 选项,有无 shopt -s extglob。
【问题讨论】:
-
当
route -n | awk '/UG[ \t]/{print $2}'产生与route -n | grep 'UG[ \t]' | awk '{print $2}'相同的结果时,无需使用额外的管道 和grep!