PATH의 ~는 홈 디렉터리가 아닐 수 있음: 따옴표 없는 틸드가 확장되지 않는 bash 함정

PATH의 ~는 홈 디렉터리가 아닐 수 있음: 따옴표 없는 틸드가 확장되지 않는 bash 함정

  • 틸드 확장은 따옴표 없는 단어의 맨 앞에서만 일어나서 export PATH="$PATH:~/.local/bin/"로 설정하면 홈이 아니라 현재 디렉터리 아래 ./~/.local/bin이 PATH에 추가됨
  • nono 샌드박스 도구가 쓰기 가능한 PATH 항목으로 ~/.local/bin/을 경고하면서 이 문제가 드러남
  • 수정은 $HOME을 쓰는 것이고, 따옴표 없이 PATH=$PATH:~/.local/bin처럼 쓰면 bash와 zsh에서는 =와 : 뒤에서 확장되지만 공백 하나에도 깨지기 쉬움
  • echo "$PATH" | tr ':' '\n' | grep '~' 명령으로 PATH의 틸드 항목을 찾아볼 수 있음

Hacker News opinions

bash 함정 #238503인데 이건 zsh도 그렇고 사실 POSIX 표준 동작임. 단어 맨 앞의 따옴표 없는 ~만 $HOME으로 바뀌고 ~user, ~+, ~- 같은 것도 따로 있음.

홈 디렉터리 확인을 안 했다는 게 신기하네. PATH가 안 먹는데 그냥 넘어간 건가?

예제에서는 $HOME을 앞에 두는 게 낫다고 봄. 시스템 경로가 앞에 있어야 악성 스크립트가 sudo 같은 걸 가로채서 비밀번호 빼가는 걸 막을 수 있음.

경로에 [A-Za-z0-9._-]만 허용하면 골치 아픈 일이 확 줄어들 텐데. 다만 다른 언어 쓰는 사람은 어떡하냐는 반론이 바로 나오더라.

따옴표를 제대로 쓰는 게 답임. $ 들어간 건 큰따옴표로 감싸고 나머지 리터럴은 작은따옴표로 감싸면 대부분 해결됨.

POSIX 기준으로는 export PATH="$PATH:"~/.local/bin 처럼 따옴표를 나눠 쓰면 된다고 봄. 내 폰의 mksh에서는 실제로 그렇게 동작하더라.

Cursor가 repo 루트에 ~ 디렉터리를 만들어서 한참 치운 적 있음. 예약어를 몇 개 막아두는 것도 나쁘지 않다고 봄.

/bin/sh가 bash가 아닌 곳이 많으니까 bash 전용 문법을 쓸 거면 shebang을 #!/bin/bash로 명시해야 함. Debian 계열은 보통 dash임.

스크립트에서는 틸드 쓰지 말고 $HOME이나 $XDG_DATA_HOME처럼 명시적으로 쓰는 게 제일 안전함.

해커뉴스
리눅스용 공간 음향 효과를 임펄스 응답으로 역공학한 과정캐나다 유튜버, Flock 유사 카메라로 경찰 차량 추적하자 경찰이 집으로 찾아옴Total Annihilation을 최신 GPU 렌더링으로 재구현한 오픈소스 엔진 Nanolathe 베타 공개소득을 자산으로 바꿔야 직장인도 부자가 된다는 글, HN 반응은 엇갈림무료 오픈소스 Mac 받아쓰기 앱 BetterWispr, 음성은 기기 안에서만 처리Valen, 그룹 빌림 기반의 유연한 borrow checker 공개 명칭 Path Borrowing 논의 확산PATH의 ~는 홈 디렉터리가 아닐 수 있음: 따옴표 없는 틸드가 확장되지 않는 bash 함정AI 에이전트로 Rails 앱을 Rust와 Elixir로 재작성한 실험, 코드를 안 읽으니 설계 판단이 빠짐테렌스 타오 Math 2.0 발표, AI 시대 증명 풍부성과 문제 풀이 최적화의 한계 제기한글 손글씨 펜 획을 생성하는 35만 파라미터 RNN, 브라우저에서 동작README를 실제 사람에게 따라 하게 한 저자, 참가자에게 €25씩 주고 설치 문서 고쳐기존 서브워드 LLM을 두 단계 변환으로 바이트 단위 모델로 바꾸는 방법, Nature 논문으로 공개DDR4 RAM 부활: 가격 폭등에 인텔과 AMD가 구형 메모리 지원 CPU 출시라즈베리 파이를 넣은 PSP 개조 기기 PSPi 6, 원래 메인보드를 통째로 대체IRCv3, 2020년대에도 쓰이는 IRC 현대화 확장 명세 소개Nitter, X 중단 요청 두 번 받고 법률 자문 없이 자금 모금 나섬LineageOS 24.0 출시, Android 17 기반으로 WebUSB 플래시 도구 추가Yandex 데이터센터 타격 뒤 Cloudflare 봇 트래픽 급감얀덱스 클라우드 3번째 데이터센터 피격, 상태 페이지에 사고 등록됨구형 Macromedia Director 게임을 최신 PC에서 돌리려고 CD 이미지 복사 방지를 벗겨낸 과정미국 국가디자인스튜디오, 브라우저에서 돌아가는 PII 마스킹 도구 Rampart 오픈소스 공개버그는 환자로, 코딩 에이전트는 의료진으로 다룬 5개월 실험OpenSCAD 공식 페이지 화제, 정식 릴리스가 2021년 버전에 머물러 있다는 지적 나와Unikernels were hard, 이제는 AI가 포팅과 구현 장벽을 낮춘다는 Geoffrey Huntley 주장C 초보 Rust 개발자를 위한 C의 함정: bool, 널 종결 문자열, 플랫폼별 정수 너비Nix가 디버거 절반을 만들었다: Rewind VM으로 본 결정론적 레이스 컨디션 추적Jev식 결정 모델을 직접 만들어보니 1.7B 모델 확률이 과신함12ft.io 종료 후 나온 대체 서비스 WallHop, 페이월 우회 도구로 HN에 공개엔비디아, 미국 오픈 모델 스타트업 Reflection AI 인수 협상 중DuckDB 2.0 알파, S3 읽기가 2배에서 3배 빨라져 쿼리 수정 없이 적용됨샌프란시스코 개발 시뮬레이션 게임 Discretionary Review, 도시가 개발을 말리는 2015년 설정Knuth 책 첫 문단 첫 단어의 오류를 찾아 받은 리워드 체크, 20년 만의 후기MXC 1.0 정식 출시, 정책으로 AI 에이전트의 실행 범위를 제한천장 전구에 프로젝터와 컴퓨터 비전을 넣은 Lightbulb Computer 설계 프로토타입집값은 오르고 재산세는 내려야 한다는 모순, 미국 재산세 개혁의 함정저수준 코더가 LLM 시대에 느끼는 상실감과 개발자 일의 변화1996년 주말 프로젝트 2D 차량 물리가 GTA 차량 시스템의 뿌리가 된 과정과 30주년 웹 재현판Rust 코드를 읽기 쉬운 C로 바꾸는 Eurydice, 고신뢰 소프트웨어와 Rust 컴파일러 없는 환경 겨냥프리온 질환 후보 약물 siRNA, 사람 대상 1상 임상 등록 시작Jane Street 인턴, 자기회귀 디퓨전으로 주식 호가 이벤트 생성 실험macOS 26 Tahoe, 오픈그룹 UNIX 인증 메인 목록에서 빠져Cloudflare 무료 티어에서 돌리는 개인 AI 에이전트 Talorys, 자체 호스팅 정의를 두고 HN 논쟁Lean 자동 형식화의 신뢰성 논쟁: AI가 만든 증명이 원 논문과 맞는가WSL 3.0.2, 커널 6.18로 올라와 메모리 대역폭 61% 향상되나 빌드 시간은 4%만 줄어Bitwarden, 앱스토어 배포본을 상업 라이선스 빌드로 전환하며 오픈소스 논란 확산벽 너머 몰래카메라를 내장 메모리의 전자기 방사로 찾아내는 ESauron, 20m 밖에서도 탐지덴마크 CPR 등록부 해킹, 침투 지점은 '123456' 비밀번호였음Telegram Desktop 링크 한 번 클릭으로 사용자 파일이 유출되고 계정까지 탈취될 수 있던 취약점캐리어 설정을 디코딩해 비교하는 carrier-explode 2.0 공개, 아이폰 픽셀 갤럭시 펌웨어 대상TypeSafe AI, $870M 투자 유치하고 기업가치 $7.5B 인정받아REA, 코딩 에이전트에 리버스 엔지니어링 도구를 붙여 프로그램 동작을 설명하게 하는 오픈소스 프로젝트경찰 추적용 Flock 카메라를 만든 유튜버, 경찰 방문을 받았다고 주장Oxide, $445M 시리즈 D 유치하고 첫 소득세 납부AAA 게임 관행을 비튼 지뢰찾기 패러디가 해커뉴스 화제Cloudflare, Deno 팀 영입하고 Deno 런타임은 1년 뒤 개발 종료Rust로 포팅한 Quake, 브라우저에서 바로 실행되는 Show HN 프로젝트StepFun의 1M 컨텍스트 MoE 모델 Step 5 Preview가 OpenRouter에 등장함, 활성 파라미터는 27B임530만 년 전 고래 사체가 쌓인 심해 공동묘지, 인도양 해저서 발견Mitchell Hashimoto가 터미널 프로그램 상태 알림용 OSC 7501 명세를 공개함리눅스용 이더넷 오디오 인터페이스 ETH-68, 왕복 지연 3.620ms로 RME 카드와 맞먹음Bevy 0.20 출시, Solari 렌더러 개선과 WESL 셰이더 공식 채택24V로 구동하는 유연한 LED 필라멘트 네온 티셔츠, Show HN에 올라옴오르쿠트 창업자가 orkut.com에서 서명 청원을 열고 실제 사람 중심 SNS 재건을 호소함AI 음원을 봇으로 재생시켜 로열티를 빼먹은 미국 남성 징역 18개월 선고$5 VPS로 뭘 24시간 돌릴지 묻는 HN 글, 답은 대부분 홈서버임DuckLake 저장소, DuckDB v2.0-cyanoptera로 버전 올리고 Postgres 재시도 로직 병합ADHD를 생체리듬 장애로 보고 수면 시간 조절 치료를 제안하는 리뷰AI 시대 프로그래머 진로, htmx 저자 Carson Gross는 직접 코드를 써봐야 읽는 능력이 생긴다고 주장테라노스 사무실을 브라우저에 재현한 Extend 마케팅 사이트가 HN에 오름일러스트레이터에게 집 그림을 맡겨 만든 Home Assistant 대시보드, HN에서 화제부모님 커피머신이 10일간 1TB 트래픽을 쏟아내 아들이 분리함DeepSeek 4.1 Flash, 프런티어 모델과 구분 안 될 만큼 싸고 성능 좋다는 사용 후기오픈AI 연간 환산 매출, 앞서 알려진 $70B에서 $50B로 정정16.9 MB 음성 인식 모델 Whistle 공개, CPU에서 첫 토큰 11.1 ms, Whisper base보다 작음4시간 배터리 저장장치, 분석 대상 43개 시장 전부에서 가스터빈보다 저렴OpenAI, 수학 결과 3건 철회하고 Lean 형식화 현황 공개함DVD 메뉴의 기술 구조와 16:9 시대의 설계 변화Zotero 20주년 글, 5년 걸린 느린 설계가 오래 가는 소프트웨어를 만들었다는 주장Claude Opus 5.5가 프롬프트 한 번으로 Invisible Cities 3D 시각화를 1시간 25분 만에 완성함HN 작성자, 10년째 탄자니아 시골 학생 학비를 개인 돈으로 지원 중트럼프 행정부, 마이크로소프트를 영주권 프로그램에서 정지시키고 사기 혐의 제기브라우저에서 도는 아날로그 컴퓨터 시뮬레이터, 적분기 5개와 포텐쇼미터로 지수 감쇠 재현OpenAI, 부호 오류 하나로 수학 논문 3편 철회하고 14편 수정LLM으로 TypeScript 컴파일러·체커·LSP를 Rust로 옮긴 ts-rust, 토큰 $400,000 주장에 실제 지출은 $24,000Swift로 만든 최소 커널, QEMU virt에서 부팅1993년 PC 데모를 x86 리컴파일로 브라우저에서 네이티브 실행, 사이클 타이밍까지 대조 검증2006년 UK 인디 차트 47위 밴드 Salvage, 15년 추적 끝에 프로듀서 크레딧에서 찾아냄요트에서 오프그리드로 사는 Hundred Rabbits, Donsol 10주년 재출시하고 일회용 패드 암호화 문서 공개OpenAI, UGC 증명 포함 372개 수학 결과 하루에 공개... '인간은 아직 아무것도 이해 못 해'테렌스 타오, AI의 무분별한 열린 문제 수확 경고하며 'Math 2.0' 제안39개 적분 답변 남긴 정체불명 수학자 Cleo, 소프트웨어 개발자 레셰트니코프로 드러나194살 거북 조너선의 게놈 해독, 노화 경로 대부분에서 고유 변이 확인구글 딥마인드 SynthID Detector 공개, 구글·엔비디아·오픈AI·카카오 생성물 워터마크 검출로절린드 프랭클린은 나선을 놓치지 않았다, 사진 49 분석이 왓슨의 주장을 반박빅토리아 엘리트는 왜 성공했나: 라틴어 80% 수업, 파티, 네트워킹TigerBeetle의 'push ifs up, fors down' 관용구 정리한 블로그, HN에서 벤치마크 없다는 비판 받아1770년대 1/16인치 자에서 1850년대 백만분의 1인치 측정기까지, 기계가 정밀도를 배운 과정구글, 코딩 없이 텍스트로 게임 만드는 실험 플랫폼 Playground 공개네 살 아들의 'wood tape' 쇼핑 목록과 설계도, 전권을 맡긴 아빠의 홈디포 나들이God of War PSP 두 작품, WebAssembly로 재컴파일돼 브라우저에서 실행

News Alerts

New alert

My alerts

Sign in to create alerts.

All alerts

Duneby 제욱AIby 제욱해커뉴스by 성현