Похоже, что это ваш адрес шлюза использование 192.168.1.1
не соответствует адресу вашего маршрутизатора. Если вы используете статический IP-адрес, детали в значительной степени соответствуют вашей сети, или она не может работать.
Начните с IP-адреса вашего маршрутизатора. Это может быть 192.168.1.254. Это могло быть 10.11.12.13. Это могло быть что-то совсем другое.
Затем вам понадобится сетевая маска, опять же из конфигурации вашего маршрутизатора, которая будет либо 24, либо что-то вроде 255.255.255.0.
Для каждых 255 в маске сети вам необходимо скопировать соответствующие числа с IP-адреса вашего маршрутизатора. Таким образом, три лота 255 означают, что вы копируете первые три группы чисел.(Если у вас есть только маска сети с одним номером, например 24, разделите ее на 8, и результат даст вам количество чисел, которые вы должны скопировать.) Наконец, вам нужно назначить неиспользуемые значения, чтобы в итоге получилось четыре группы номеров.
Предположим, ваш маршрутизатор - 10.1.1.254, а ваша сетевая маска - 255.255.0.0. Затем вы должны скопировать 10.1 и получить оставшиеся два числа в диапазоне 1-254. Результатом будет ваш IP-адрес, например 10.1.44.66, но не используйте группу номеров, которая уже используется!
Вы получили неполный вывод строк как часть той же строки в том месте, где была напечатана новая строка. Части строки буферизуются внутри read
, , вот что она делает:
Утилита read должна считывать одну логическую строку со стандартного ввода
. ] Например, это выводит
через одну секунду, а не
.
(echo -n foo ; sleep 1 ; echo bar) | (read x ; echo "<$x>")
Если вы хотите перехватывать ввод меньшими частями, чем полные строки, вам нужно сделать что-то еще, например. с Перл. Это напечатает
(с новой строкой перед последней >
, так как в отличие от read
, Perl не обрабатывает последнюю новую строку особенно. Не должно иметь значения с окраской.)
(echo -n foo ; sleep 1 ; echo bar) |
perl -e '$|=1; while(sysread STDIN,$a,9999) { print "<$a>"}'
Если у вас есть управляющие коды для цветов (RED
и COLORRESET
), экспортированные в среду, вы можете использовать их из Perl сценарий как здесь:
perl -e '$|=1; while(sysread STDIN,$a,9999) {print "$ENV{RED}$a$ENV{COLORRESET}"}'
В Bash вы можете использовать параметр -d
для встроенной функции read
, которая определяет символ конца строки. man bash
утверждает следующее:
-d delim The first character of delim is used to terminate the input line,
rather than newline.
Если он не определен, read
ожидает появления \n
, чтобы считать строку строкой. Но когда вы используете опцию -d
, вы можете установить NUL
в качестве разделителя. Конечно, вам также необходимо завершить ввод NUL.
Пример:
printf "%s\0" $'x\n' y z | while IFS='' read -r -d $'\0' line
do
printf "%s\n" "$line"
done
Результат:
x
y
z
Еще раз, но теперь printf
в цикле while
не соответствует \n
.
printf "%s\0" $'x\n' y z | while IFS='' read -r -d $'\0' line
do
printf "%s" "$line"
done
Вывод:
x
yz(...)
Я добавил (...)
, и это означает, что в конце второй строки нет End-Of-Line. Но текст все равно обрабатывается и печатается.