Если вы запустите bash
как:
LD_DEBUG=bindings bash
в системе GNU и grep для bash. * Tinfo
в этом выводе вы увидите что-то вроде:
797: binding file bash [0] to /lib/x86_64-linux-gnu/libtinfo.so.5 [0]: normal symbol `UP'
797: binding file bash [0] to /lib/x86_64-linux-gnu/libtinfo.so.5 [0]: normal symbol `PC'
797: binding file bash [0] to /lib/x86_64-linux-gnu/libtinfo.so.5 [0]: normal symbol `BC'
797: binding file bash [0] to /lib/x86_64-linux-gnu/libtinfo.so.5 [0]: normal symbol `tgetent'
797: binding file bash [0] to /lib/x86_64-linux-gnu/libtinfo.so.5 [0]: normal symbol `tgetstr'
797: binding file bash [0] to /lib/x86_64-linux-gnu/libtinfo.so.5 [0]: normal symbol `tgetflag'
Вы можете подтвердить из вывода nm -D / bin / bash
, что bash
использует эти символы из тинфо.
Открытие страницы руководства для любого из этих символов проясняет, для чего они нужны:
$ man tgetent
NAME
PC, UP, BC, ospeed, tgetent, tgetflag, tgetnum, tgetstr, tgoto, tputs -
direct curses interface to the terminfo capability database
В основном, bash
, более вероятно, его readline
(libreadline статически связана) редактор , использует их для запроса базы данных terminfo, чтобы узнать о возможностях терминала, чтобы он мог правильно запускать свой строковый редактор (отправляя правильные escape-последовательности и правильно распознавая нажатия клавиш) на любом терминале.
Что касается того, почему строка чтения статически связана с bash
, вы должны иметь в виду, что строка чтения
разрабатывается вместе с bash
одним и тем же человеком и включена в источнике bash
.
Можно собрать bash
для связывания с установленной системой libreadline
, но только если эта версия совместима, а это не по умолчанию. Вам нужно вызвать сценарий configure
во время компиляции с - with-installed-readline
.
nslookup EXAMPLE.example.com \
| awk '/^Name:/ {N=$2}; /^Address:/ {A=$2}; END {print N,A}'
Imprimirá solo el apellido y la dirección, pero si los quiere todos:
nslookup EXAMPLE.example.com \
| awk '/^Name:/ {N=$2}; /^Address:/ {print N,$2}'
Usar dig
en lugar de:
$ dig +noall +answer example.com | awk '{ print $1, $NF }'
example.com. 93.184.216.34
$ dig +noall +answer www.google.com | awk '{ print $1, $NF }'
www.google.com. 172.217.20.36
El script awk
imprime el primer y último espacio en blanco -campos delimitados de la salida del comando dig
(la salida sin formato también contiene algunas otras columnas en -entre estos ).
Su comando:
nslookup EXAMPLE.example.com | awk 'FNR ==4 {print$2}' | awk 'FNR ==5 {print$2}'
Esto no funciona ya que el segundo programa awk
intenta obtener la quinta línea de la salida del primer programa awk
, que solo genera una sola línea.
Algo así podría haber funcionado,
$ nslookup example.com | awk 'FNR == 4 || FNR == 5 { print $2 }'
answer:
example.com
pero en mi sistema, como puede ver, los datos buscados están en otras líneas (no en las líneas 4 y 5 ). Esto puede funcionar mejor para usted.
nslookup -type=A cdnjs.cloudflare.com | awk '/^Name:/ {c=2;N=$2} !--c {print N,$2}'
который распечатает все записи:
cdnjs.cloudflare.com 104.16.18.94
cdnjs.cloudflare.com 104.16.19.94
В отличие от других решений, этот сценарий будет соответствовать только фактическому ответу, а не адресу DNS-сервера. В случае неудачи он ничего не выведет.
Это было навеяно ответом на этот вопрос .