Как определить IP-адрес из скрипта bash? - PullRequest
0 голосов
/ 02 ноября 2018

Как я могу получить IP-адрес текущей машины от Bash кроссплатформенным способом? Мне нужно получить IP-адрес одинаково для Windows Linux и Mac OS.

В настоящее время я использую docker-compose для создания локальной версии моего полного развертывания, однако я не могу получить к ней доступ с помощью localhost или 127.0.0.1, я должен ссылаться на IP-адрес текущего компьютера, например curl 192.168.0.23:80

В настоящее время я заставляю пользователя устанавливать IP-адрес вручную:

# Return true if we pass in an IPv4 pattern.
not_ip() {
  rx='([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])'

  if [[ $1 =~ ^$rx\.$rx\.$rx\.$rx$ ]]; then
    return 1
  else
    return 0
  fi
}

# Ensure lower case
OPTION=$(echo $1 | tr [:upper:] [:lower:])

case "$OPTION" in
"test")
    LOCAL_IP=${LOCAL_IP:-$2}

    if not_ip "$LOCAL_IP" ; then
      echo The test command couldn\'t resolve your computers Network IP. $LOCAL_IP
      echo
      help_comment
      exit 1
    fi
    python -m webbrowser "http://${LOCAL_IP}:80/" &
    ;;
esac

Однако я бы хотел получить это без необходимости установки пользователем каких-либо переменных среды, особенно при работе с компьютерами Windows.

Есть идеи?

1 Ответ

0 голосов
/ 02 ноября 2018

Вам необходимо определить хост перед использованием следующего из-за специфических команд ОС

Windows (командная строка Cygwin)

LOCAL_IP=${LOCAL_IP:-`ipconfig.exe | grep -im1 'IPv4 Address' | cut -d ':' -f2`}

MacOS

LOCAL_IP=${LOCAL_IP:-`ipconfig getifaddr en0`} #en0 for host and en1 for wireless

Linux

LOCAL_IP=${LOCAL_IP:-`ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p'`}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...