rah*_*hmu 9 shell scripting ksh
我经常编写遵循相同模式的 KSH shell 脚本:
为了做到这一点,我经常将 (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
Run Code Online (Sandbox Code Playgroud)
有没有办法使用管道、重定向和诸如此类的东西来避免每次将文件写入磁盘?
如果有帮助,我正在使用 ksh 版本 M-11/16/88i
你的代码对我来说看起来像是一个完全合理的使用临时文件的例子。我会留下:坚持这种方法。唯一真正需要改变的是创建临时文件的方式。使用类似的东西
TMP=$(tempfile)
Run Code Online (Sandbox Code Playgroud)
或者
TMP=$(mktemp)
Run Code Online (Sandbox Code Playgroud)
或者至少
TMP=/tmp/myscript_$$
Run Code Online (Sandbox Code Playgroud)
这样您就不会轻易预测名称(安全性)并排除同时运行的多个脚本实例之间的干扰。
你可以使用一个变量:
info="$(getInfo $SERVICE)"
SERV_NAME="$(head -1 $TMPFILE <<<"$info" | sed -e 's/ $//')"
...
Run Code Online (Sandbox Code Playgroud)
来自man ksh:
<<<word A short form of here document in which word becomes the
contents of the here-document after any parameter expan-
sion, command substitution, and arithmetic substitution
occur.
Run Code Online (Sandbox Code Playgroud)
优点包括: