pipefail을 켰는데 diff <(...)의 생산자 실패가 보이지 않는다
같은 한 줄을 출력하고 7로 끝난 생산자를 diff <(...)에 연결해도 diff는 0이었다. pipefail과 PIPESTATUS의 범위를 구분하고, 생산자 상태를 따로 확인한 뒤 파일을 비교하는 방법을 설명한다.
빌드노트
Linux·운영 카테고리의 글입니다.
총 48개의 글
같은 한 줄을 출력하고 7로 끝난 생산자를 diff <(...)에 연결해도 diff는 0이었다. pipefail과 PIPESTATUS의 범위를 구분하고, 생산자 상태를 따로 확인한 뒤 파일을 비교하는 방법을 설명한다.
Bash에서 & 직후의 0은 자식의 완료 상태가 아니다. 종료 0·7인 자식으로 차이를 확인하고, $!로 저장한 PID에 각각 wait해 실패를 배치 상태로 전달한다. 인자 없는 wait와 여러 PID를 한 번에 기다리는 경우의 한계도 비교한다.
GNU sed -i는 심볼릭 링크가 있던 이름을 새 일반 파일로 교체할 수 있다. 링크·대상의 종류와 inode·내용을 비교하고, --follow-symlinks로 대상을 편집할지 새 파일로 결과를 남길지 고른다.
Bash 함수에서 local value=$(command) 뒤의 상태 0은 내부 명령의 성공을 보장하지 않는다. 같은 출력과 종료 상태 7을 내는 명령으로 선언·대입을 합친 경우와 분리한 경우를 비교하고, 대입 직후 실패를 저장해 반환하는 방법을 설명한다.
Bash의 {1..$n}은 매개변수 확장보다 먼저 처리되어 숫자 목록이 되지 않는다. 짧은 출력 비교로 문자열 하나가 남는 것을 확인하고, 0..99 입력 검증과 산술 for로 변수 횟수를 표현한다. 0회·선행 0·POSIX sh의 경계도 구분한다.
wc -l은 LF 개수를 센다. 마지막 LF만 다른 파일과 빈 파일·빈 줄을 실제 바이트로 비교하고, 미종결 텍스트 레코드를 포함할 때의 awk NR과 CSV·JSON 파서의 적용 경계를 구분한다.
test -e가 거짓이어도 끊어진 심볼릭 링크는 이름을 차지한다. -L과 readlink를 함께 보고, 저장된 대상 경로가 틀렸는지 파일만 누락됐는지를 구분한다.
하드링크는 원본과 같은 inode를 공유하므로 truncate·write의 영향을 함께 받는다. device·inode·링크 수와 실제 내용을 비교하고, 새 파일로 이름을 교체했을 때 이전 하드링크가 남는 차이를 확인한다.
Bash는 *.log에 맞는 파일이 없으면 기본적으로 패턴 자체를 인자로 남긴다. 빈 폴더와 공백 포함 두 파일로 기본·nullglob·failglob를 비교하고, 배열 개수로 호출을 결정하는 방법과 failglob의 종료 상태 경계를 확인한다.
상대 심볼릭 링크의 대상 경로는 링크가 놓인 폴더에서 해석한다. CWD를 바꿔 읽기, 링크만 복사해 실패하기, 새 위치에 맞는 상대경로로 복구하기를 합성 파일 실습으로 비교한다.
Bash에서 echo로 확인한 값이 자식에게 없는 이유를 셸 변수와 환경의 차이로 설명한다. 합성 변수의 대입·명령 앞 대입·export를 비교하고, 자식의 변경이 부모로 돌아오지 않는 실제 출력으로 전달 범위를 고른다.
Bash의 >file 2>&1과 2>&1 >file을 실제로 비교한다. ERR가 부모 stdout으로 빠지는 결과와 복제 뒤 stdout을 다른 파일로 바꾼 결과로 연결 시점을 설명하고, 로그 목적지와 종료 코드를 구분한다.