임시 파일 관리
- 임시 파일을 사용해야할 '때'도 있다. (분명..)
- 가령 subshell로 실행한
bg
는 wait로 기다릴 수 없기 때문에, 임시 파일에 실행해야할 커맨드들을 쓰고 읽어서 child process를 만들거나...
$ mktemp
: 임시 파일 간단 생성
$ mktemp
- 임시 파일을
/tmp/tmp.XXXXXX
로 생성하고 STDOUT으로 Path를 출력해준다.
$ mktemp Path
: 지정된 위치에 임시파일 생성
$ mktemp $(pwd -P)/hello.XXXX
- arg로 오는 Path 절대경로에 X에는 랜덤값을 넣어 임시파일 생성 후, 그 경로를 STDOUT에 출력
TMPFILE1=$(mktemp /tmp/im1.XXXXX)
TMPFILE2=$(mktemp /tmp/im2.XXXXX)
XXX
문자를 사용하면 알아서 채워주고 만들어준 후, STDOUT으로 그 이름을 출력한다.
#!/bin/bash
TMPFILE1=$(mktemp /tmp/interrupt1.XXXXX)
TMPFILE2=$(mktemp /tmp/interrupt2.XXXXX)
cat /proc/interrupts > ${TMPFILE1}
sleep 2
cat /proc/interrupts > ${TMPFILE2}
diff ${TMPFILE1} ${TMPFILE2}
rm -f ${TMPFILE1} ${TMPFILE2}
- 스크립트가 중단 될 경우, 임시 파일들만 남겨질 수 있다.
- 위 예제에서
cat
명령 전에 Ctrl + C
를 누르면, 임시 파일들은 /tmp
에 고스란히 남는다.
trap
을 사용하여 Ctrl + C
시그널을 잡아 시그널 핸들러를 생성하고, 임시 파일들을 삭제하도록 해보자.
#!/bin/bash
trap "rm -f ${TMPFILE1} ${TMPFILE2}; exit 1" INT