Shell编程,避免使用临时文件

拉姆

我经常编写遵循相同模式的KSH Shell脚本:

  • (1)从一个或多个命令检索输出
  • (2)使用grep | cut | awk | sed格式化并打印到屏幕或文件中

为了做到这一点,我经常将(1)的输出存储在一个临时文件中,然后对该文件进行(2)的格式化。

以该代码为例:

TMPFILE=file.tmp

# If tmpfile exists rm it.
[ -f $TMPFILE ] && rm -f $TMPFILE

for SERVICE in $(myfunc); do
    getInfo $SERVICE > $TMPFILE # Store raw output in the TMPFILE

    # I retrieve the relevant data from the TMPFILE
    SERV_NAME=$(head -1 $TMPFILE | sed -e 's/ $//')
    SERV_HOSTNAME=$(grep HOSTNAME $TMPFILE | cut -d "=" -f2)
    SERV_ARGS=$(grep Arguments $TMPFILE | cut -d ":" -f2)

    print $SERV_NAME $SEP $SERV_HOSTNAME $SEP $SERV_ARGS
    rm -f $TMPFILE #rm the TMPFILE in vue of next iteration
done

有没有一种方法可以使用管道,重定向和其他方法来避免每次都将文件写入磁盘?

如果有帮助,我正在使用ksh版本M-11 / 16 / 88i

摇床

您的代码对我来说似乎是使用tempfiles的完全合理的示例。我会留下来的:坚持这种方法。真正需要更改的唯一一件事就是创建临时文件的方式。使用类似

 TMP=$(tempfile)

或者

 TMP=$(mktemp)

或者至少

 TMP=/tmp/myscript_$$

这样,您就不会轻易预测名称(安全性),并且避免了同时运行的脚本的多个实例之间的干扰。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章