마지막 포트가 제거될 때만 브리지를 종료하고 싶기 때문에 다소 인위적인 검사 방법을 사용하여 이를 수행합니다.
brctl show는 정보를 얻기 위해 구문 분석하기 어려워 보이며 아래에 있는 것보다 훨씬 나아지지도 않습니다. 더 깨끗한 방법이 있습니까?
brctl_count_if()
{
local BRIDGE=$1
if [ ! -d /sys/devices/virtual/net/$BRIDGE ]; then
echo 0
return
fi
/bin/ls -1 /sys/devices/virtual/net/$BRIDGE/brif 2>/dev/null | wc -l
}
답변1
할 수 있어요:
has_ports() {
ls -A "/sys/devices/virtual/net/$1/brif/" 2> /dev/null | grep -q .
}
has_ports br0 || brctl delbr br0
또는:
if ! has_ports br0; then
brctl delbr br0
fi
-A
( 인터페이스 이름은 로 시작할 수 있으므로 그렇게 해야 합니다 .
.)
포트 수를 계산하려면:
그리고 zsh
:
ports=(/sys/devices/virtual/net/$bridge/brif/*(DN:t))
printf '%s\n' "$#ports ports in $bridge"
(:t)
전체 경로가 아닌 파일 이름만 포함하십시오.
그리고 bash
:
shopt -s nullglob dotglob
ports=("/sys/devices/virtual/net/$brige/brif/"*)
printf '%s\n' "${#ports[@]} ports in $bridge"
(s에는 동등한 경로가 없으므로 포트에는 전체 경로가 포함됩니다 bash
.)zsh
:t
존재하지 않는 브리지의 경우 둘 다 0을 반환합니다.