シェルプログラミング、一時ファイルを避ける

シェルプログラミング、一時ファイルを避ける

私はしばしば同じパターンに従うKSHシェルスクリプトを書いています。

  • (1) 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を使用しています。

ベストアンサー1

あなたのコードが一時ファイルを完全に合法的に使用しているようです。私はこの方法に固執します。本当に変更する唯一のことは、一時ファイルが生成される方法です。次のようなものを使用してください

 TMP=$(tempfile)

または

 TMP=$(mktemp)

または少なくとも

 TMP=/tmp/myscript_$$

これにより、名前を簡単に予測でき(同時に)同時に実行される複数のスクリプトインスタンス間の干渉を排除できなくなります。

おすすめ記事