LINUX.ORG.RU

Как изменить панель в tmux при наличии VPN соединения?

 


0

1

Подскажите, пожалуйста, есть строка в моем конфиге:

set -g status-right "#[fg=colour255,bg=colour1] #H #[fg=colour0,bg=colour25] %H:%M %d.%m.%Y "

Как сделать чтобы при наличии в системе поднятого интерфейса tun0 самым левым из правой панели tmux отображался его IP, но без него были бы текущие настройки панели?


самым левым из правой панели tmux отображался его IP

Это как? У вас есть ″status-right″ и ″status-left″. Но у панели нет право/лево, только ″pane-border-format″.

mky ★★★★★
()

Напиши шеллскрипт, который возвращает IP нужного тебе tun-интерфейса, и не возвращает ничего, если интерфейса нет или он не настроен.

Если бы у тебя был ifconfig из FreeBSD (а это не net-tools, или как его там), я бы тебе свой дал, но в Linux от него толку не будет — форматы разные, да и скорее всего у тебя iproute2.

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

Написал вчера перед сном, но не уверен что сделал самым легким способом, мб IP где-то в файле в ФС хранится?

#!/bin/bash
[ -d /proc/sys/net/ipv4/conf/tun0 ] && echo "VPN: $(ip a sh dev tun0 | grep -w inet | awk '{print $2}' | awk -F / '{print $1}' 2>/dev/null)"
NordeN
() автор топика
Ответ на: комментарий от NordeN

bash — это медленно, есть же sh (в линуксах оно симлинк на bash, но без свистелок). Ну и твоя конструкция awk+grep+awk легко превращается в один единственный awk (плюс группирование вывода, у тебя в /dev/null stderr летит только от последнего awk, а от ip он у тебя будет высран куда-нибудь):

#!/bin/sh
[ -d /proc/sys/net/ipv4/conf/tun0 ] && echo "VPN: $({ ip a sh dev tun0 | awk '/inet /{gsub(/\/.*/, ""); print $2}'; } 2>/dev/null)"

Если я правильно понял, что оно должно выдавать.

Насколько я помню, ip не выдаёт ничего в stdout (только stderr) при отсутствии интерфейса, потому проверять наличие диры совершенно необязательно:

#!/bin/sh
ip="$({ ip a sh dev tun0 | awk '/inet /{gsub(/\/.*/, ""); print $2}'; } 2>/dev/null)"
[ -n "${ip}" ] && echo "VPN: ${ip}"

Или ещё проще (не знаю, будет ли работать в Linux):

#!/bin/sh
ip="$({ ip a sh dev tun0 | awk '/inet /{print $2}'; } 2>/dev/null)"
[ -n "${ip}" ] && echo "VPN: ${ip%%/*}"
mord0d ★★★★★
()
Ответ на: комментарий от NordeN

У ip есть ключи, которые упрощают вывод.

Мне-то откуда это знать? iproute2 — линуксовая утилита.

#!/bin/sh
ip="$({ ip -4 -br a sh dev tun0 | awk '{print $3}'; } 2>/dev/null)"
[ -n "${ip}" ] && echo "VPN: "${ip%%/*}"
mord0d ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.