Установка вывода переменной по таймауту

Для установки Debian 6 (или 6 LTS) вам необходимо использовать http://archive.debian.org ; например. в вашем sources.list :

deb http://archive.debian.org/ squeeze main contrib non-free
deb http://archive.debian.org/ squeeze-lts main contrib non-free

Что касается вашей разглагольствования, то, хотя я понимаю ваше разочарование, это проблема затрат: хранение релиза в сети главного зеркала требует места для хранения (и, следовательно, денег , косвенно), и создает ожидания поддержки, которые не могут быть выполнены в рамках существующей LTS (или проекта в более общем плане).

2
26.03.2019, 19:33
2 ответа

telnetожидает tty на своем стандартном вводе, но timeoutубирает его.

Если вы действительно настаиваете на использовании telnet, вы можете сделать это, добавив опцию --foregroundк timeout, как в:

output=$(timeout --foreground --signal=9 3 telnet 1.2.3.4 1234 2>&1 | grep "something")

Кроме того, если вы можете иметь ncв своей системе, вам лучше использовать его для своих целей:

output=$(timeout 3 nc 1.2.3.4 1234 | grep "something")

Если ни nc, ни timeout --foregroundвам не подходят, тогда вам действительно нужна альтернатива telnet, которая не требует tty.

Я вижу, вы пометили свой вопрос bash, чтобы вы могли использовать собственные сетевые возможности Bash, и поэтому ваша строка может выглядеть как:

output=$(timeout 3 cat < /dev/tcp/1.2.3.4/1234 | grep "something")

Если даже catне подходит, вы можете заменить его одним скриптом -в Bash, как в:

output=$(timeout 3 stdbuf -oL bash -c 'while read line ; do echo "${line}" ; done < /dev/tcp/1.2.3.4/1234 | grep "something"')

Надеемся, что в вашей системе доступен как минимум stdbuf(, являющийся частью стандартного пакета coreutils ).

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

Это необходимо также, если вам нужно передать переменные (, например, имя хоста и/или номер порта )из вашей оболочки в один скрипт -лайнера. Например:

hostname=1.2.3.4
portnumber=1234

output=$(timeout 3 stdbuf -oL bash -c 'while read line ; do echo "${line}" ; done < /dev/tcp/'"${hostname}"'/'"${portnumber}"' | grep "something"')

Здесь я предполагаю, что значениям ${hostname}и ${portnumber}можно доверять, т. е. они предоставлены вами или другими надежными источниками, которые не дадут незаконных, недействительных или опасных значений.

2
27.01.2020, 22:08

Это стандартная ошибка, которая не перенаправляется (, когда ваша ссылка не работает )! Это решит вашу проблему, потому что стандартная ошибка перенаправляется на стандартный вывод.

output=$(timeout --signal=9 3 telnet 1.2.3.4 1234 2>&1 | grep "something") 
1
27.01.2020, 22:08

Теги

Похожие вопросы