Как уже упоминали другие, машина не имеет гарантированного или даже вероятного наличия одного IP-адреса. Я не уверен, что именно вы подразумеваете под «внутренним IP»; иногда это может означать «IP-адрес в локальной сети», то есть интерфейс, который подключается к брандмауэру с поддержкой NAT.
Я думаю, что лучший способ сделать это - подключиться к хосту в сети, которую вы хотите, и использовать адрес, с которого происходит это соединение. Это будет интерфейс, который машина обычно использует для подключения к этой сети. У пользователя Unkwntech была такая же идея на этой теме . Код ниже только что взят из этого ответа.
Я не знаю, действительно ли это квалифицируется как решение "bash", поскольку это всего лишь встроенный скрипт Python, но в любом случае это даст вам локальный IP-адрес, используемый для достижения google.com . Так что это даст вам IP-адрес любого интерфейса, который машина использует для доступа к узлам Интернета.
$ python -c 'import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("google.com", 80))
print s.getsockname()[0]'
Более подходящее решение bash-y может использовать tracepath
или аналогичную утилиту.