【问题标题】:Obtaining gateway IP from Bash script fails, but works in terminal从 Bash 脚本获取网关 IP 失败,但在终端中有效
【发布时间】: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

标签: bash debian


【解决方案1】:

我不确定您为什么将命令序列存储在变量中,然后尝试通过评估来执行它 ($var)。你可以这样做:

eval "$GETGATEWAY"

如果没有eval,shell 会将route 解释为命令,并将其他所有内容(包括| 等)解释为它的参数。而extglob 选项与此无关。

你可能想看看这篇文章:

Why should eval be avoided in Bash, and what should I use instead?

【讨论】:

    【解决方案2】:

    您应该使用命令替换来计算 IP 地址并将其存储到任何变量中。

    var=$(command1|command2|....)
    

    例子:

    GATEWAY=$(route -n |awk '/UG/{print $2}')
    echo $GATEWAY
    10.1.1.1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-11
      • 1970-01-01
      • 2011-07-22
      • 1970-01-01
      • 1970-01-01
      • 2013-01-08
      相关资源
      最近更新 更多