2011-04-20 63 views
0

運行命令行應用程序時,路過本地IP作爲參數,我有我使用一個命令行應用程序,也必須要通過我的本地IP地址作爲參數,如:在Unix中

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

我想使url參數自動獲得我的IP,因爲我總是在不同的網絡上並獲得不同的loal IP地址。

,所以我可以在我的.bashrc

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

其中$ IP將我的本地IP地址動態獲取使用此別名。

有沒有辦法做到這一點?

+0

'curl ifconfig.me'會讓你的公共IP,如果這就是你要找的。 – 2011-04-20 10:13:06

回答

4

首先,使用雙引號代替單引號括起來的$ 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地址。選擇一個最符合你的要求的。

+0

感謝隊友,剛剛評論過@unwind的答案,你們的兩個例子都返回零( – zanona 2011-04-20 10:34:29

+0

@ludicco,它最好把你的問題中提供的任何新信息。把它們寫進評論部分會失去重要的格式,有些人不會閱讀評論。也就是說,看看我的編輯。 – 2011-04-20 10:44:52

+0

膨脹,非常感謝,這絕對適用。謝謝你的提示,我會確保我會添加下次問題中的這種評論。歡呼隊友 – zanona 2011-04-20 10:55:55

1

計算機不一定有「本地IP地址」,通常有幾個。例如,您通常具有本地主機地址(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

+0

奇怪,無論是在你和@ bash-o-logist示例中,它都會返回一個空字符串形式。這也適用於macosx雪豹嗎?這裏是'ifconfig'爲我返回的內容:https://gist.github.com/930952我的本地ip att現在是:'10.11.33.148'或許他們使用的是不同的路由系統,因爲當我回家的時候我得到更多的常規192.168.0.X,但對於本地的似乎很奇怪?對不起,我真的不明白這是如何工作的:/ – zanona 2011-04-20 10:29:00