Передача Local IP в качестве аргумента при запуске приложения командной строки в Unix - PullRequest
0 голосов
/ 20 апреля 2011

У меня есть приложение командной строки, которое я использую, а также должен передать мой локальный IP-адрес в качестве аргумента, например:

jekyll --url 'http://192.168.1.2:3000' --pygments --safe --server 3000 --auto

Я бы хотел, чтобы аргумент url автоматически получал IP-адрес, поскольку я всегда нахожусь в разных сетях и получаю разные локальные IP-адреса.

чтобы я мог использовать этот псевдоним в моем .bashrc

alias jkl="jekyll --url 'http://$IP:3000' --pygments --safe --server 3000 --auto"

где $ IP будет моим локальным IP-адресом, полученным динамически.

Есть ли способ сделать это?

Ответы [ 2 ]

4 голосов
/ 20 апреля 2011

Во-первых, используйте двойные кавычки вместо одинарных кавычек вокруг переменной $ IP, иначе она не будет интерполировать значение

#!/bin/bash
# tested on bash 4
while read -r line
do
  case "$line" in
   "inet "* )
        line="${line/inet /}"
        line="${line%% *}"
        if [[ ! $line =~ ^(127|172) ]] ;then
            IP="$line"
            echo "IP: $IP"
        fi
        ;;
  esac
done < <(ifconfig)


echo jekyll --url "http://$IP:3000" --pygments --safe --server 3000 --auto

Обратите внимание, что у вас будет несколько разных IP-адресов на выходе. Выберите тот, который больше всего соответствует вашим требованиям.

1 голос
/ 20 апреля 2011

Компьютер не обязательно имеет «локальный IP-адрес», их часто бывает несколько.Например, у вас обычно есть адрес localhost (127.0.0.1) и один или несколько «истинных» внешне видимых адресов.Автоматизированному решению сложно определить, какое из них выбрать.

Возможно, простое решение - это жестко закодировать интерфейс «eth0» (или как там у вас самый типичный интерфейс).

В Linux вы можете использовать что-то вроде этого:

$ ifconfig | grep -A1 eth0 | cut -d: -f2 | cut -d ' ' -f1 | grep \\.
192.168.0.8

Таким образом, чтобы вставить это в переменную (предположим, bash), вы должны использовать

MY_IP=$(ifconfig | grep -A1 eth0 | cut -d: -f2 | cut -d ' ' -f1 | grep \\.)

Обратите внимание, что это жесткие кодыимя интерфейса как eth0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...