LINUX.ORG.RU

Можно ли скрыть вывод не перенаправляя в /dev/null

 ,


0

2

Ситуации разные бывают, и устройства /dev/null может не существовать. Можно ли в этом случае как-нибудь скрыть вывод команд, который обычно идёт в stdout и stderr ? Понятно, что можно перенаправить в файл. Но почему же так не делает команда emerge, и не может без /dev/null работать? Тем более, что полный лог лучше, чем лог, из которого что-то пропущено. Отфильтровать ненужное до записи в лог тоже наверное как-нибудь можно. Или нет?

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

Такого, чтобы вот прям сказать ядру «хочу чтоб вывод в этот дескриптор игнорировался» - нет. /dev/null как раз для этого предполагался, да, он привязан к файловой системе и я тоже считаю, что это плохо, но что есть то есть.

По-хорошему, в идеале, должна быть опция самой проги, говорящая ей «не хочу никаких логов». Потому что, даже если ты перенаправляешь в /dev/null, прога всё равно готовит все эти тексты к выводу и тратит на это лишнее процессорное время. Но у многих такой опции, к сожалению, нет.

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

Я не понял, что здесь написано. Выглядит так, как будто-бы что-то про метки и условные переходы. Но в баше нет goto…

Какие слова мне надо искать, чтобы найти описание этой конструкции в руководстве по bash?

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

Можно набрать help :. Вкратце, команда : игнорирует все свои аргументы и просто успешно завершается.

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

Ничем не лучше. Семантика совершенно разная. Поэтому я и писал раньше, что : не подходит.

В твоем случае echo "test" запустится. В случае с : echo "test" ничего не запустится. Можешь сам проверить, заменив echo, скажем, на touch. В первом случае файл test будет создан, во втором — нет.

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

Чем мне это поможет? То есть что я там должен вычитать?

Даже если там есть опция конфигурации, или параметр командной строки, то программа всё равно не будет работать на файловой системе, в которой нет /dev/null.

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

Ты не понимаешь мою цель.

Моя цель в том, чтобы emerge работал как обычно, но не падал с ошибкой из-за отсутствия /dev/null.

А ты, вероятно, говоришь о ключе –quiet-build [ y | n ] Redirect all build output to logs alone, and do not display it on stdout.

Этот ключ - это не то что мне надо.

И вот, ничего не понимая, ты настаиваешь.

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

С чего ты взял, что эта опция перенаправляет в /dev/null? Может и перенаправляет, но скорее не выводит.

Но если б emerge писал ты, перенаправлял бы. А обычно просто не выводят.

grem ★★★★★
()
Последнее исправление: grem (всего исправлений: 2)
Ответ на: комментарий от Shushundr

Побуду проблемой X/Y, но как так получилось, что у тебя нету /dev/null? И - главное - почему плюешься на закономерно ничегонепонявших лорчан вместо того, чтобы, черт побери, сразу указать, что тебе (вероятно) emerge сообщает

Failed to validate a sane '/dev'.
'/dev/null' is not a device file.

и проблема ни в каких не перенаправлениях, а в захардкоженном обращении к /dev/null?

Как ты себе представлял какую либо помощь без этой информации?

token_polyak ★★★★
()
Последнее исправление: token_polyak (всего исправлений: 5)
Ответ на: комментарий от Shushundr

Читать надо исходные тексты тогда

Зачем?

Боюсь, что у тебя есть какой-то вредный для характеристик артефакт и звёзды не помогут. Выбрось его. Или прекрати создавать темы по пьяни.

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

как так получилось, что у тебя нету /dev/null?

Это случилось случайно, но потом я подумал, а так ли нужен этот файл этой программе в принципе? И из любопытства решил спросить. Любопытство надо поощрять, а не гнобить.

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

Гнобят не твое любопытство, а сумбурное изложение и, того хуже, неизложение сути вопроса.

В принципе может быть и не нужен, но примерно в 100% случаев он есть, так что никто не будет дополнительно плясать ради поддержи обстановки, которая никогда не случится.

token_polyak ★★★★
()
Последнее исправление: token_polyak (всего исправлений: 2)
Ответ на: комментарий от Shushundr

Другого подхода не завезли.

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

В идеале, конечно, можно бы и при повреждении чипов ОЗУ убегать в кэш процессора и оттуда всё graciously останавливать, записывать последние байтики в файлы et c. и много чего ещё предотвращать, но это фантастикамечты, по причине того, что ресурсов —„—.

Изучай четыре истины, а постигнешь житейскую истину «80% is good enough».

token_polyak ★★★★
()
Последнее исправление: token_polyak (всего исправлений: 9)
Ответ на: удаленный комментарий

Да, я говно как человек… или человек как говно. Почему тебя это смущает?

Ты хочешь скрыть вывод не перенаправляя в devnul, но хочешь видеть вывод. Эээээ.

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

Вывод хочу скрыть не я, а emerge. Для этого он использует /dev/null. А такого файла нет.

А я не такой как emerge, я хочу видеть вывод который должен выводиться, и чтобы не использовался /dev/null

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

Они делают это от безысходности. Потому что пофиксить emerge сложнее.

Но не для всех задач, выполняемых emerge, нужны proc и dev. И если бы он умел обходиться без них, людям было бы проще с ним работать.

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

что человек запускающий пакетный менеджер не смонтировав устройства явно не в себе.

Это значит, что документация не доработана и не содержит описания причин, по которым такое монтирование нужно. Было бы описание, дали бы на него ссылку и вопрос был бы снят.

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

хочет странного

Поэтому на западе развитие, из-за толерантности к странному. А в России отставание.

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

Тут всю систему менять надо.

Ну так форкни хоть всю генту, что ты как маленький. Знаешь сколько я таких сдохших форков от любителей решать совсем не те проблемы повидал?..

... На самом деле не так уж и много, но пальцев на одной руке уже не хватит чтобы их пересчитать, вот.

Мой старый ответ на похожую тему как никогда актуален!

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

Мой старый ответ на похожую тему как никогда актуален!

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

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

Проблема создать правильный chroot в необходимости лишних действий. Причем это должны делать все люди, желающие установить gentoo в chroot. Хотя можно было всё сделать удобно и приятно.

Shushundr ★★★
() автор топика