Сокрытие вывода команды сценария

Идеально, Ваш системный администратор настроил бы сеть с сервером DNS, и что сервер DNS будет динамично обновлен с именами хостов от DHCP.

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

Другой, более старый метод является сервером NIS. Но они больше не очень распространены. Можно попробовать ypcat hosts и посмотрите, возвращает ли это Вас что-то.

Другой - zeroconf, где хосты, которые поддерживают его, широковещательно передали свое имя, и можно выполнить сервис, который кэширует их (пакет Avahi делает это. Если у Вас есть настроенный затем a ping .local уже может работать на Вас. Но не каждый узел будет поддерживать это также. можно также попытаться запросить с avahi инструментами: avahi-resolve-host-name .local и запись сценария, который обновляет/etc/hosts для Вас, если нормальный сопоставитель не работает.

Таким образом, нет никакого другого "волшебного" места для получения имен хостов от. Кто-то оказывается перед необходимостью определять то отображение или делать его динамично поддающимся обнаружению. Если бы Ваш системный администратор не сделал, или не будет, то необходимо сделать это. И единственное место, можно сделать это для локальной машины, является/etc/hosts файлом. Таким образом, если ни один из вышеупомянутых методов не работает затем, Вы застреваете с этим.Прошу прощения.

1
24.06.2014, 17:03
2 ответа

Запустите ваш скрипт с:

exec 3>&1 1>/dev/null 2>&1

, который сохранит ваш оригинальный файловый дескриптор для stdout в &3, а затем перенаправит stdout и stderr в /dev/null. Всякий раз, когда вы хотите что-то напечатать, перенаправьте его вывод на &3, например:

echo "This message won't be output"
echo "But this one will" >&3

И если вы хотите скрыть эту деталь, вы можете просто определить функцию, которая перекликается с fd 3:

say() {
    echo >&3 "$@"
}

say "This goes to the log"
5
27.01.2020, 23:13

Вы можете перенаправить stdout на /dev/null, добавив

1>/dev/null

в конце каждой строки вашего скрипта, которая будет выдавать вывод.

Вы можете перенаправлять ошибки таким же образом, добавляя

2>/dev/null

Большинство команд также имеют возможность отключить обычный вывод в консоль типа -q или что-то в этом роде. Проверьте manpages используемых команд.

.
2
27.01.2020, 23:13

Теги

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