Идеально, Ваш системный администратор настроил бы сеть с сервером DNS, и что сервер DNS будет динамично обновлен с именами хостов от DHCP.
Вы могли бы попытаться использовать сообщения доменного имени ICMP для жатвы их, но я не думаю, что это широко реализовано.
Другой, более старый метод является сервером NIS. Но они больше не очень распространены. Можно попробовать ypcat hosts
и посмотрите, возвращает ли это Вас что-то.
Другой - zeroconf, где хосты, которые поддерживают его, широковещательно передали свое имя, и можно выполнить сервис, который кэширует их (пакет Avahi делает это. Если у Вас есть настроенный затем a ping
уже может работать на Вас. Но не каждый узел будет поддерживать это также. можно также попытаться запросить с avahi инструментами: avahi-resolve-host-name
и запись сценария, который обновляет/etc/hosts для Вас, если нормальный сопоставитель не работает.
Таким образом, нет никакого другого "волшебного" места для получения имен хостов от. Кто-то оказывается перед необходимостью определять то отображение или делать его динамично поддающимся обнаружению. Если бы Ваш системный администратор не сделал, или не будет, то необходимо сделать это. И единственное место, можно сделать это для локальной машины, является/etc/hosts файлом. Таким образом, если ни один из вышеупомянутых методов не работает затем, Вы застреваете с этим.Прошу прощения.
Запустите ваш скрипт с:
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"
Вы можете перенаправить stdout на /dev/null
, добавив
1>/dev/null
в конце каждой строки вашего скрипта, которая будет выдавать вывод.
Вы можете перенаправлять ошибки таким же образом, добавляя
2>/dev/null
Большинство команд также имеют возможность отключить обычный вывод в консоль типа -q
или что-то в этом роде. Проверьте manpages используемых команд.