Bash에서 쓰기 가능한 파일에 >가 거절된다
Bash의 noclobber가 켜지면 쓰기 가능한 기존 일반 파일도 >로 덮어쓸 수 없다. 실제 오류와 현재 셸 설정을 확인하고, 임시 파일 실험으로 새 파일·추가 쓰기·명시적 우회의 차이를 비교해 출력 방식을 고른다.
빌드노트
Linux·운영 카테고리의 글입니다.
총 48개의 글
Bash의 noclobber가 켜지면 쓰기 가능한 기존 일반 파일도 >로 덮어쓸 수 없다. 실제 오류와 현재 셸 설정을 확인하고, 임시 파일 실험으로 새 파일·추가 쓰기·명시적 우회의 차이를 비교해 출력 방식을 고른다.
flock의 비차단 잠금에 실패해도 바깥 셸의 >는 이미 출력 파일을 비울 수 있다. 같은 잠금을 점유한 상태에서 종료 코드와 파일 바이트를 비교하고, 데이터 파일을 여는 리다이렉션을 잠금 성공 뒤로 옮긴다.
Bash 래퍼에서 "$*"는 공백 있는 값과 빈 문자열까지 한 인자로 합친다. 실제 자식의 인자 수와 값을 비교해 "$@"가 경계를 보존함을 확인하고, 개수가 같아도 값이 달라지는 인용 누락과 빈 인자·무인자의 차이를 설명한다.
파이프 오른쪽 while read가 바꾼 변수는 별도 셸에 남을 수 있다. 실제 BASHPID와 줄 수를 비교해 파일 리다이렉션·프로세스 치환을 고르고, lastpipe와 job control에 따른 예외를 확인한다.
Bash 배치에 tee를 붙였을 때 생산자 7·tee 0인데 전체 상태가 0이 되는 차이를 확인한다. 짧은 pipefail 오류 처리부, 즉시 저장하는 PIPESTATUS와 소비자 조기 종료의 SIGPIPE 한계를 설명한다.
read -r는 역슬래시를 보존하지만 양끝 공백까지 지키려면 IFS=도 필요하다. 실제 바이트와 루프 실행 횟수를 비교하고, 값이 할당돼도 EOF에서 실패하는 마지막 개행 없는 입력의 처리 조건을 확인한다.
Bash의 ${VAR-default}는 빈 문자열을 그대로 쓴다. 미설정·빈 값의 실제 비교로 :-와 :=를 고르고, 인자에만 기본값을 쓸지 변수에도 저장할지 구분한다. set -u와 공백 값의 한계도 짚는다.
따옴표로 감싼 -n도 GNU cat에는 옵션이다. 실제 파일과 표준 입력의 출력을 비교해 --로 옵션을 끝내는 경우와, 단독 -를 ./- 경로로 지정해야 하는 경우를 구분한다.
GNU find의 -mtime +1은 수정 후 48시간 이상을 고른다. 23·25·47·49시간 전 파일의 실제 선택 결과로 -mtime 1·+1·+0과 -mmin +1440을 비교하고, 경과 시간과 달력상 어제를 구분해 조건을 고른다.
GNU tar의 -C는 뒤에 오는 파일 인자에 적용된다. 파일 앞뒤의 옵션 순서와 연속 상대경로 b·../b를 비교하고, 종료 코드·멤버 이름·실제 내용으로 읽은 원본을 확인한다. 같은 이름으로 저장되는 두 파일은 공통 부모의 하위 경로로 구별할 수 있다.
Bash에서 명령 앞 대입과 같은 줄의 변수 인자가 서로 다른 값을 쓰는 이유를 확인한다. export 전후의 자식 인자·환경·부모 값을 비교하고, 별도 대입 후 호출하거나 자식에서 환경을 읽는 방법을 고른다.
Bash에서 0으로 시작한 ((counter++))는 값을 늘리고도 종료 상태 1을 반환해 set -e 스크립트를 끝낼 수 있다. 짧은 재현으로 후속 출력과 상태를 확인하고, counter=$((counter + 1))로 고친다. 전위 증가도 -1에서는 멈추는 이유를 함께 설명한다.