LINUX.ORG.RU

bash: скрыть вывод в терминал, но оставить вывод в файл

 


0

1

Доброе, подскажите, внутри скрипта есть такое:

… whois $testdomain | grep -vE «^%|^$» > $tmpdir/$testdomain …

При выполнении скрипта whois выдает:

% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 19 100 19 0 0 103 0 –:–:– –:–:– –:–:– 103

не могу понять, как оставить вывод в файл, но запретить выводить в терминал (stdout)… Если отправляю всю конструкцию в /dev/null, то он и в файл не пишет ;( спасибо



Последнее исправление: AntonDZ (всего исправлений: 2)

Нихрена непонятно из-за неверной разметки поста, но подозреваю, что тебе надо stderr перенаправить в null.

Типа такого:

какая-то-команда > файл.txt 2>/dev/null
wandrien ★★★★
()
Ответ на: комментарий от AntonDZ

У команд два стандартных потока выаода. stdout и stderr. Их надо отдельно перенаправлять.

wandrien ★★★★
()

У программ есть три стандартных потока: вход (fd0, он же stdin), вывод (fd1, он же stdout) и вывод для ошибок или служебной информации (fd2, он же stderr). Вот именно во второй дескриптор whois пишет прогресс.

Пардон, кто именно пишет в fd2 — ещё вопрос. Похоже на curl.

kaldeon ★★
()
Последнее исправление: kaldeon (всего исправлений: 1)
Ответ на: комментарий от Aceler

даже если греп убрать и оставить whois $testdomain > $tmpdir/$testdomain 2>/dev/null

то все равно получаю

root@ddm:~# bash test-domain.sh domain.ru 1.1.1.1 % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 19 100 19 0 0 99 0 –:–:– –:–:– –:–:– 99

AntonDZ
() автор топика

(забанить бы ТСа за то что он разметкой не пользуется… читать невозможно. что-то я злой сегодня, хорошо, что я не модератор)

wandrien ★★★★
()
Ответ на: комментарий от AntonDZ

первый поток (stdout) от whois перенаправляется в grep. второй поток (stderr) не перенаправлен и потому отправляется на отображение.
тебе как понимаю надо убрать вывод whois из отображения. его надо перенаправить в null. както так
….whois $testdomain 2>/dev/null | grep ….

pfg ★★★★★
()
Последнее исправление: pfg (всего исправлений: 1)
Ответ на: комментарий от firkax

Как обычно, ни актуальный код, относительно которого возник вопрос, показать не могут, ни оформить сообщение. XY-problem.

wandrien ★★★★
()
Ответ на: комментарий от AntonDZ

root@ddm:~# bash test-domain.sh domain.ru 1.1.1.1 % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 19 100 19 0 0 99 0 –:–:– –:–:– –:–:– 99

whois не может выводить такой текст. Что у тебя там ещё?

Aceler ★★★★★
()
Ответ на: комментарий от Aceler

Я дико извиняюсь, это я уже свихнулся, там действительно дальше curl был, который на ASN проверяет, вот он то и выдавал этот мусор, а я почему-то к whois привязался и заклинило…

Спасибо вам огромное! whois действительно не может выводить такой текст.

Всем большое sudo thanks за оперативность а мне спать пора.. всю ночь различные проверки для антиспама к ACL писал и на ровном месте застрял ;)

AntonDZ
() автор топика
Ответ на: комментарий от IvanRia

о чем речь?

$ whois linux.org.ru 2>/dev/null | grep -vE "^%|^$"
domain:        LINUX.ORG.RU
nserver:       pns1.cloudns.net.
nserver:       pns2.cloudns.net.
nserver:       pns3.cloudns.net.
nserver:       pns4.cloudns.net.
state:         REGISTERED, DELEGATED, VERIFIED
person:        Private Person
registrar:     RU-CENTER-3LVL
admin-contact: https://www.nic.ru/whois/
created:       1998-10-21T06:25:08Z
paid-till:     2026-12-14T21:00:00Z
free-date:     2027-01-15
source:        MSK-IX
Last updated on 2026-04-15T10:14:05Z
gagarin0
()
Ответ на: комментарий от gagarin0

так ему все это не на терминал надо, а в файл, вот о чем, а вы вообще stderr (которого там может и нет вовсе) отправляете в /dev/null, а все остальное на терминал

IvanRia
()

это очень просто. Используй вначале сценария exec > my.log 2>&1

exec > my.log 2>&1

whois linux.org.ru 2>/dev/null | grep -vE «^%|^$»

в данном случае весь вывод включая ошибки перенаправляется в файл my.log

anonymous
()
  • Markdown
Пустая строка (два раза Enter) начинает новый абзац. Знак '>' в начале абзаца выделяет абзац курсивом цитирования.
Внимание: прочитайте описание разметки Markdown.
Используйте Ctrl-Enter для размещения комментария