Solo un servicio podrá vincularse al puerto 53 a la vez (en la misma dirección IP)
Debe deshabilitar/desinstalar DNSMasq
si desea ejecutar bind
.
Es probable que /etc/resolv.conf
esté configurado en localhost
o 127.0.0.1
, deberá cambiar esto para que apunte a un servidor de nombres real, o si tiene bind
configurado para reenviar consultas de DNS, entonces puede configurar /etc/resov.conf
a la dirección bind
que está escuchando.
Как Мэтью Гюнтер указывает в своем ответе , именованный канал("fifo" )может использоваться для того, чтобы скрипт читал собственный вывод.
#!/bin/bash
# Create pipe and arrange to remove it when done.
mkfifo mypipe
trap 'rm -f mypipe' EXIT
# Just to start off the sequence. Note that this
# needs to be a background process to avoid
# blocking, as there is nobody reading from the
# pipe yet.
echo '0 1' >mypipe &
# Numbers to produce. Note that the produced numbers
# will overflow at n=93.
n=48
# Read the two numbers from the pipe and put the
# last of these back together with the next number
# in the sequence:
while [ "$n" -gt 0 ] && read a b; do
c=$(( a + b ))
printf '%d %d\n' "$b" "$c" >&3
# Also print the "b" number as output.
printf '%d\n' "$b"
n=$(( n - 1 ))
done <mypipe 3>mypipe
Я использую дополнительный файловый дескриптор для записи в конвейер в цикле, просто чтобы иметь возможность выводить сгенерированную последовательность чисел в стандартный поток вывода, как обычно(и , чтобы не перегружать стандартный поток ошибок этой цели ).
Если вы хотите использовать свой код Python с таким подходом, вы, скорее всего, сделаете что-то вроде
#!/bin/bash
mkfifo mypipe
trap 'rm -f mypipe' EXIT
printf '%d\n%d\n' 0 1 >mypipe &
python3 -c 'if True: # dummy to fix indentation
b = int(input())
for _ in range(48):
a, b = b, int(input())
print(a + b)' <mypipe >mypipe
Вы заметите, что вы не получаете никаких выходных данных от этого скрипта, потому что мы используем выходные данные кода Python в качестве собственных входных данных. Чтобы получить некоторый вывод в терминале, мы должны сделать что-то подобное в моем цикле оболочки выше (записать что-то, отличное от стандартного вывода):
#!/bin/bash
mkfifo mypipe
trap 'rm -f mypipe' EXIT
printf '%d\n%d\n' 0 1 >mypipe &
python3 -c '
import sys
b = int(input())
for _ in range(48):
a, b = b, int(input())
print(a + b)
print(b, file=sys.stderr)' <mypipe >mypipe
Здесь я (ab -)использую стандартный поток ошибок для предоставления фактического результата пользователю в терминале. Было бы лучше, если бы я сделал это так же, как я сделал цикл оболочки в моем первом варианте (для обработки вывода в конвейер через новый файловый дескриптор ), но мне очень не хватает знаний о Python.