破译unix语句

O_O*_*O_O 4 environment-variables

我来破译这里所说的:

export IP=`/sbin/ifconfig | grep 'inet addr:'|grep -v '127.0.0.1'|
    cut -d: -f2 | awk '{print $1}'`
Run Code Online (Sandbox Code Playgroud)

我知道将 IP 设置为环境变量,但除此之外,其他一切意味着什么?

小智 15

它将列出系统上的所有非环回 IP 地址。假设你在这个盒子上只有一个非环回 IP 地址,它会将系统的 IP 地址导出到环境变量“IP”。

首先一次运行一个“部分”管道。意思是,第一次运行

/sbin/ifconfig
Run Code Online (Sandbox Code Playgroud)

看看它做了什么。然后跑...

/sbin/ifconfig | grep 'inet addr:'
Run Code Online (Sandbox Code Playgroud)

并从那里继续前进。

  • 让新人逐步执行这样的命令是个好主意。+1 (5认同)

Bru*_*ger 5

有很多事情要发生。第一的:

export IP=`...`
Run Code Online (Sandbox Code Playgroud)

意味着在反引号之间运行命令(不是单引号,小心)并将其输出用作名为“IP”的变量的值。“export”意味着任何子进程都将继承名为“IP”的变量及其值。

命令是一个管道,每个输入的标准输出到下一个标准输入。/sbin/ifconfig生成有关网络接口的信息列表。ifconfig 的所有输出行都输入grep 'inet addr:'. Grep 只是传递至少部分匹配第一个参数的文本行,这种模式称为正则表达式。

该命令grep -v '127.0.0.1'仅传递不匹配的文本行。127.0.0.1 是“环回”IP 地址。众所周知,我们不希望它进入名为“IP”的变量的值中。

该命令cut -d: -f2在其输入中打印每行的第二个字段。字段由“:”(分号)分隔。该awk '{print $1}'命令只打印第一个空格分隔的列。

正如 TheDude 所写,它将所有非环回 IP 地址作为字符串放入 shell 环境变量 IP 的值中。