Я отчаянно пытаюсь использовать вывод grep для сценария:
ping dc"$(grep -o .""\[12].domain.local"" /etc/squid3/squid.conf)"
ping "$(grep -o ""dc0\[12].domain.local"" /etc/squid3/squid.conf)"
Оба возврата:
ping: unknown host dc02.domain.local
Если я ввожу ping dc02.domain.local
, это работает! Я не вижу, что я делаю неправильно?
Соответствующая строка/etc/squid3/squid.conf:
external_acl_type memberof %LOGIN /usr/lib/squid3/squid_ldap_group -R -K -b "dc=domain,dc=local" -D username@domain.local -W /aaa/bbb/ccc.txt -f "(&(objectclass=person)(sAMAccountName=%v)(memberof=cn=%g,ou=aaa,ou=bbb,ou=ccc,ou=ddd,ou=eee,dc=domain,dc=local))" -h dc02.domain.local
Причиной сбоя является то, что файл /etc/squid3/squid.conf
содержит более одной строки, соответствующей шаблону. Поэтому, когда вы выполняете
ping "$(grep ....)"
, все совпадения, разделенные символом новой строки, передаются как один аргумент в ping
, который принимает в качестве аргумента только один адрес, следовательно, он терпит неудачу.
Обратите внимание, что вместо использования шаблона Regex, который вы использовали, вы можете упростить сопоставление последнего слова, используя:
grep -o 'dc[^ ]\+ , предполагая, что слово начинается с dc
.
Наконец, поскольку у вас есть несколько адресов для запуска ping
, вы должны использовать цикл:
for i in $(grep -o 'dc[^ ]\+ ping -c 4
отправит 4 пакета ICMP Echo_Request каждому получателю.
/etc/squid3/squid.conf); do ping -c 4 "$i"; done
ping -c 4
отправит 4 пакета ICMP Echo_Request каждому получателю.
/etc/squid3/squid.conf
, предполагая, что слово начинается с dc
.
Наконец, поскольку у вас есть несколько адресов для запуска ping
, вы должны использовать цикл:
for i in $(grep -o 'dc[^ ]\+ ping -c 4
отправит 4 пакета ICMP Echo_Request каждому получателю.
/etc/squid3/squid.conf); do ping -c 4 "$i"; done
ping -c 4
отправит 4 пакета ICMP Echo_Request каждому получателю.
Вы могли также использовать awk
awk -F'-h ' '/-h +dc0[12]/ {system("ping -c 3 "$2)}'
-F'-h '
Мы интересуемся только, что находится позади -h
.
/-h +dc0[12]\.domain\.local/
Мы интересуемся только строкой dc01.domain.local
и dc02.domain.local