Bash에서 구분자로 문자열 나누기 — IFS read, readarray, 파라미터 확장 실측 비교
CSV 한 줄, PATH 같은 콜론 목록, 설정 파일의 key=v1;v2;v3처럼 구분자로 이어진 문자열을 배열로 나누는 일은 셸 스크립트에서 매일 나온다. 그런데 흔히 쓰는 방법들은 공백이 든 필드, * 같은 glob…
CSV 한 줄, PATH 같은 콜론 목록, 설정 파일의 key=v1;v2;v3처럼 구분자로 이어진 문자열을 배열로 나누는 일은 셸 스크립트에서 매일 나온다. 그런데 흔히 쓰는 방법들은 공백이 든 필드, * 같은 glob…
API 응답을 페이지별로 모은 리스트, 파일마다 읽은 줄 목록처럼 리스트의 리스트를 한 줄로 펴야 하는 경우는 흔하다. 방법은 list comprehension, itertools.chain, sum(xss, []) 등 여럿인데, 어느 것이 빠른지에 대한 통념과…
레지스터 플래그, 권한 비트, 상태 마스크처럼 정수 하나의 특정 비트만 켜고 끄는 코드는 드라이버부터 일반 애플리케이션까지 어디에나 있다. 연산 자체는 |, &, ^ 한 줄이지만, 시프트할 리터럴의 타입을 잘못 고르면…
빌드 산출물이나 .env 같은 파일을 실수로 커밋한 뒤 뒤늦게 .gitignore에 추가해도, git은 그 파일을 계속 추적하고 변경을 M으로 보여준다. .gitignore는 아직 추적하지 않는(untracked) 파일에만 적용되기 때문이다. 흔히 쓰는 git rm…
설정 파일이나 같은 저장소의 다른 스크립트를 읽으려면 스크립트 자신이 있는 디렉터리를 알아야 한다. pwd는 호출한 쪽의 작업 디렉터리일 뿐이라 쓸 수 없고, dirname $0은 실행 방식에 따라 결과가 달라진다. 흔히…
작업하던 파일을 main_final.py, main_final2.py로 복사해 두다 보면 어느 것이 최신인지 금방 헷갈린다. 며칠 전 동작하던 코드로 돌아가고 싶은데 그 시점의 사본이 없기도 하다. Git은 이 문제를 파일 사본이 아니라 "변경…
Yocto로 이미지를 만들다 보면 패키지 하나를 넣거나 빼야 할 일이 계속 생긴다. 그런데 local.conf에 IMAGE_INSTALL += "strace"라고 적어도 이미지에 strace가 들어가지 않는다. 이미지 레시피가 IMAGE_INSTALL을 다시 할당해버리기 때문인데, 이처럼 변수마다…
읽기 전용 이미지 포맷으로 EROFS를 쓰기로 정하고 나면 그다음 벽은 도구다. SquashFS가 mksquashfs/unsquashfs 두 개로 끝나는 것과 달리 EROFS는 생성·조회·검사·마운트가 네 개 명령으로 나뉘어 있고, 그중 하나는 아예 별도 패키지다.…
읽기 전용 루트 이미지나 컨테이너 베이스 레이어를 만들 때는 관성적으로 mksquashfs를 쓰게 되는데, 안드로이드와 컨테이너 런타임 쪽에서는 이미 EROFS로 넘어간 지 오래다. 그런데 막상 같은 디렉터리로 두 이미지를 만들어보면 EROFS…
프로세스 이름 표시, 부모가 죽었을 때 자식 정리, 권한 상승 차단, 코어 덤프 생성 여부처럼 프로세스 자체의 커널 레벨 동작을 세밀하게 제어하고 싶을 때가 있다. 리눅스는 이런 잡다한 제어를 위해…