2013-02-26 3 views
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 

мне нужно сделать что-то особенное после трубы, так что знает, бежать ли команда grep из переменной g? Использование backticks (исторический) также терпит неудачу.

ответ

1

Использование Eval

ns="ns.nameserver.co.uk" 
d="domain.co.uk" 
g="grep $d | grep -v 'DiG'" 
dig @$ns $d A | eval $g 
+0

Eval почти работает, однако ему не нравится делать grep, затем pipe, а затем другую команду внутри кавычек. – Zippyduda

+0

работает для меня, хотя –

+0

Ах, извините, я был особенным. Он работает, спасибо! :) – Zippyduda

1

Вы не можете сохранить команду в переменной, только выход команды. Поскольку вы не указали какой-либо вход для grep на третьей строке, он будет считываться со стандартного ввода. Вы можете просто удалить переменную и изменить команду к следующему

dig @$ns $d A | grep $d | grep -v "DiG" 
+0

Я так и думал. Это было просто потому, что я должен искать A, AAAA, MX и TXT, поэтому я хотел, чтобы одна переменная редактировалась (более чистая), а не все четыре greps, чтобы иметь | grep -v 'DiG \ |;' после них. – Zippyduda

1

Вы можете определить функцию вместо переменной.

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

Это тоже не работает: просто возвращает: синтаксическая ошибка: неожиданный конец файла – Zippyduda

+0

Вы пытаетесь установить определение функции на одну строку? Если это так, между командой и заключительной фигурной скобкой требуется полуколона. – chepner

+0

У меня было ощущение, что это будет необходимо. Будет ли это идти, хотя я нашел решение :) Тах. – Zippyduda