1

我究竟做错了什么?

这有效:

ns="ns.nameserver.co.uk"
d="domain.co.uk"
dig @$ns $d A | grep $d

然而,在管道之后只使用一个变量不会(它挂起):

ns="ns.nameserver.co.uk"
d="domain.co.uk"
g=$(grep $d | grep -v "DiG")
dig @$ns $d A | $g

我需要在管道之后做一些特殊的事情,以便它知道从 g 变量运行 grep 命令吗?使用反引号(历史)也失败了。

4

3 回答 3

1

您不能将命令存储在变量中,只能存储命令的输出。由于您没有grep在第三行指定任何输入,它将从标准输入读取。您可以简单地删除变量并将dig命令更改为以下内容

dig @$ns $d A | grep $d | grep -v "DiG"
于 2013-02-26T11:37:04.720 回答
1

您可以定义一个函数而不是一个变量。

ns="ns.nameserver.co.uk"
d="domain.co.uk"
g () {
    grep "$1" | grep -v "DiG"
}
dig @$ns $d A | g "$d"
于 2013-02-26T13:55:11.703 回答
1

使用评估

ns="ns.nameserver.co.uk"
d="domain.co.uk"
g="grep $d | grep -v 'DiG'"
dig @$ns $d A | eval $g
于 2013-02-26T15:57:20.637 回答