/tmp/rapport.txt에 쓰는 스크립트는 문제를 일으킬 수 있습니다: 다른 실행이 이미 이 이름을 사용할 수 있으며, 로컬 사용자가 대신 심볼릭 링크를 준비할 수 있습니다. mktemp는 예측할 수 없는 이름으로 파일이나 디렉토리를 생성하고 즉시 스크립트에 예약합니다.
중간 출력을 위해 임시 파일을 사용하고, 이후 trap으로 정리하세요. 이렇게 하면 스크립트가 오류나 중단이 있더라도 자신의 디렉토리를 깨끗하게 유지할 수 있습니다.

$$로 이름을 만들지 마세요
이 오래된 습관은 여전히 위험합니다:
tmp="/tmp/rapport-$$.txt"
echo "결과" > "$tmp"
PID는 이름을 비밀로 만들지 않으며 파일은 계산할 때 생성되지 않습니다. 경로를 구축하고 쓰기 사이에 다른 프로세스가 이 이름을 차지할 수 있습니다. mktemp는 경로를 반환하기 전에 객체를 생성합니다.
tmp_file=$(mktemp -p "${TMPDIR:-/tmp}" rapport.XXXXXX) || exit 1
printf '%sn' "결과" > "$tmp_file"
템플릿은 마지막 구성 요소에 최소한 세 개의 X가 연속적으로 포함되어야 합니다. 문자는 생성 될 때 대체됩니다. 변수 주변에 항상 따옴표를 유지하세요: TMPDIR는 공백을 포함할 수 있습니다.
여러 파일을 위한 임시 디렉토리 만들기
임시 디렉토리는 /tmp에 여러 파일을 분산시키는 것을 방지합니다. 이는 준비할 아카이브, 변환 또는 중간 파일을 생성하는 보고서에 유용합니다.
workdir=$(mktemp -d -p "${TMPDIR:-/tmp}" sauvegarde.XXXXXX) || exit 1
printf '%sn' "데이터" > "$workdir/liste.txt"
tar -czf "$workdir/rapport.tar.gz" "$workdir/liste.txt"
대부분의 시스템은 이 디렉토리를 귀하의 계정에 대한 권한으로 생성합니다. 스크립트가 중요한 데이터를 포함한 키, 내보내기 또는 아카이브를 조작할 때 확인하세요:
stat -c '%a %U:%G %n' "$workdir"
ls -la "$workdir"
잘못된 경로를 지우지 않고 trap으로 정리하기
디렉토리 생성 직후에 정리 함수를 정의하세요. 변수가 존재하고 예상된 디렉토리를 가리키는지 테스트한 후 rm -rf를 호출하세요.
workdir=$(mktemp -d -p "${TMPDIR:-/tmp}" mon-script.XXXXXX) || exit 1
cleanup() {
[ -n "${workdir:-}" ] && [ -d "$workdir" ] && rm -rf -- "$workdir"
}
trap cleanup EXIT HUP INT TERM
# 여기서 스크립트 처리
trap ... EXIT는 쉘이 종료될 때 정리를 시작합니다. HUP, INT 및 TERM 신호는 일반적인 중단을 담당합니다. kill -9로 강제 종료하면 쉘이 이 함수를 실행할 시간을 주지 않으므로, 큰 처리 작업을 위한 제어 정리도 미리 계획해야 합니다.
mktemp로 경로를 생성하고, 절대 날짜나$$로 생성하지 마세요;- 스크립트가 여러 파일을 생성할 경우
mktemp -d를 사용하세요; - 스크립트에 의해 생성되고 확인된 변수만 삭제하세요;
- 실패 진단이 필요하다면 임시 파일을 보관한 후 분석 후 삭제하세요.
Bash 이력에 관한 가이드는 명령줄에서 입력된 비밀번호가 ~/.bash_history에 남지 않도록 도와줍니다. 최종 결과를 보관하려면 리눅스에서 tar 아카이브 생성 및 추출하기도 참고하세요.