Подобно @ ответу Джесси , этот параметр может быть намного быстрее, чем любое решение, использующее ping
, и, возможно, немного более эффективно, чем @ ответ Джесси .
find /sys/class/net/ -maxdepth 1 -mindepth 1 ! -name "*lo*" -exec sh -c 'cat "$0"/carrier 2>&1' {} \; | grep -q '1'
Explenation:
Эта команда использует find
с -exec
для запуска команды для всех файлов, которые не называются *lo*
в /sys/class/net/
. Это должны быть ссылки на каталоги, содержащие информацию о доступных сетевых интерфейсах на вашем компьютере.
Выполняемая команда - это команда sh
, которая проверяет содержимое файла carrier
в этих каталогах. Значение $interface/carrier
имеет 3 значения - Цитирование :
Кажется, есть три состояния:
- . / Carrier не читается (например, когда интерфейс отключен в Network Manager).
- . / Carrier содержит «1» (когда интерфейс активирован и он подключен к сети WiFi)
- . / Carrier содержит «0» (когда интерфейс активирован и не подключен к сети WiFi)
Первый вариант не учтен в @ ответ Джесси . Выдвинутая команда sh
:
# Note: $0 == $interface
cat "$0"/carrier 2>&1
cat
используется для проверки содержимого carrier
и перенаправления всех выходных данных на стандартный вывод, даже если он выходит из строя, поскольку файл не читается.
Если grep -q
находит среди этих файлов "1"
, это означает, что подключен как минимум 1 интерфейс. Код выхода grep -q
будет окончательным кодом выхода.
Использование
Например, используя статус завершения этой команды, вы можете использовать ее для запуска gnubiff в вашем ~/.xprofile
, только если у вас есть подключение к Интернету.
online() {
find /sys/class/net/ -maxdepth 1 -mindepth 1 ! -name "*lo*" -exec sh -c 'cat "$0"/carrier 2>&1 > /dev/null | grep -q "1" && exit 0' {} \;
}
online && gnubiff --systemtray --noconfigure &
Ссылка