【问题标题】:Passing Local IP as argument when running command line application in Unix在 Unix 中运行命令行应用程序时传递本地 IP 作为参数
【发布时间】:2011-08-09 08:59:04
【问题描述】:

我有一个我使用的命令行应用程序,并且还必须将我的本地 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 地址。

有什么办法吗?

【问题讨论】:

  • curl ifconfig.me 将为您提供您的公共 IP,如果这是您正在寻找的。​​span>

标签: unix terminal command ip local


【解决方案1】:

首先,在 $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。选择最符合您要求的。

【讨论】:

  • 谢谢队友,刚刚评论了@unwind 答案,你的两个例子都为我返回 nil :(
  • @ludicco,最好把你有的任何新信息放在你的问题中。将它们放入 cmets 部分会丢失重要的格式,并且有些人不阅读 cmets。也就是说,请参阅我的编辑。
  • 膨胀,非常感谢,这肯定很好用。也感谢您的提示,我将确保下次在问题中添加这些类型的 cmets。干杯队友
【解决方案2】:

一台计算机不一定有“本地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

【讨论】:

  • 很奇怪,无论是在您的示例还是 @bash-o-logist 示例中,它都会从我那里返回一个空字符串。这也适用于macosx雪豹吗?这是ifconfig 为我返回的内容:gist.github.com/930952 我的本地 IP 此刻是:10.11.33.148 也许他们正在使用不同的路由系统,因为当我在家时,我会得到更常规的 192.168.0.X但对于本地人来说似乎很奇怪?抱歉,我真的不明白这是如何工作的:/
猜你喜欢
  • 1970-01-01
  • 2014-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多