迭代管道结果时避免临时文件

时间:2017-03-14 22:32:06

标签: bash

我已经创建了显示接口和每个接口IP的功能

network() {
iplst() {
ip a show "$i" | grep -oP "inet\s+\K[\w./]+" | grep -v 127
}
ip ntable | grep -oP "dev\s+\K[\w./]+"| grep -v lo | sort -u >> inf_list
netlist="inf_list"
while read -r i
do
infd=$i
   paste <(echo -e $i) <(iplst)
 done < $netlist
}

当前输出:

ens32   10.0.0.2/24
        10.0.0.4/24
        10.0.0.20/24
ens33   192.168.1.3/24
ens34   192.168.0.2/24
ens35   192.168.2.149/24

但是想避免创建临时文件, 会很感激的建议

2 个答案:

答案 0 :(得分:3)

通常,临时文件可以替换为进程替换。例如,要避免使用inf_list临时文件,可以使用inf_list 函数生成其内容

build_inf_list() {
  ip ntable | grep -oP "dev\s+\K[\w./]+"| grep -v lo | sort -u
}

iplst() {
  ip a show "$1" | grep -oP "inet\s+\K[\w./]+" | egrep -v '^127'
}

while read -r i; do
  paste <(printf '%s\n' "$i") <(iplst "$i")
done < <(build_inf_list)

一些注意事项:

  • 传递(和使用)显式参数使得读者比依赖代码中其他地方设置的全局变量更加明显,并减少将来添加的函数将踩到您依赖的变量名称的机会。
  • 使用进程替换<(...)替换为文件名,当从中读取时,将返回命令...的stdout;因此,由于您对临时文件的写入来自此类命令,因此您只需使用进程替换调用替换临时文件即可。
  • echo -e在其输出中未打印-e的任何外壳都为defying black-letter POSIX。虽然bash以这种方式不符合默认情况,但如果posix和{{1},则不一致 } flags都设置了,然后bash符合标准的字母。使用xpg_echo更加安全,它的定义要强得多。另请参阅链接标准文档的APPLICATION USAGE和RATIONALE部分,它解释了BSD和AT&amp; T UNIX如何具有传统上不兼容的printf版本,以及POSIX标准在其要求的行为中如此松散的原因。 / LI>

答案 1 :(得分:0)

最终结果,谢谢@Charles Duffy

 <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8" />
    <title>App1</title>

    <script src="Assets/Libs/jquery-3.1.1.js"></script>

    <link href="https://fonts.googleapis.com/css?family=Roboto"     rel="stylesheet">
    <link href="css/default.css" rel="stylesheet" />
</head>
<body>
    <h1>Works</h1>
    <script src="js/main.js"></script>
</body>
</html>

编辑