TL;DR

  • Anywhich(anyw)는 여러 패키지 관리자에 설치된 실행 파일까지 확인하며, Linux에서 동작하는 which 대안임.
  • PATH의 모든 항목을 순서대로 검색해 일치 항목을 전부 표시하고, 실제로 실행되는 항목을 알려줌.
  • pacman, apt, dnf, zypper, apk, xbps, Flatpak, Snap, Nix, npm -g, deno, uv, pnpm, bun, cargo install, go install, pipx 확인자를 지원함.
  • Windows는 PATHEXT에 따른 .exe, .bat, .cmd 검색을 지원하며, Scoop·Chocolatey·WinGet 확인자는 픽스처 테스트만 완료된 상태임; macOS는 미테스트 상태임.
  • --plain, --why, 빌드·테스트·릴리스 절차와 MIT 또는 Apache-2.0 이중 라이선스를 제공함.

개요

  • Anywhich는 시스템에 설치된 항목을 $PATH에 없어도 찾는 which 대안이며, 입력 명령은 anyw임.
  • which는 $PATH에서 검색을 멈추고 첫 번째 결과만 표시하므로, 패키지 관리자가 여럿인 시스템에서는 바이너리가 설치돼 있어도 결과가 비어 있을 수 있음.
  • anyw는 $PATH 전체를 순서대로 검색해 모든 일치 항목과 실제 실행되는 항목을 표시함.
  • 현재 Linux에서 동작하며, 다음 확인자를 지원함.
  • 시스템 패키지 관리자: pacman, apt, dnf, zypper, apk, xbps
  • 애플리케이션 및 언어 패키지 관리자: Flatpak, Snap, Nix, npm -g, deno, uv, pnpm, bun, cargo install, go install, pipx
  • Windows 검색은 PATHEXT를 따라 .exe, .bat, .cmd를 확인함. Scoop, Chocolatey, WinGet 확인자는 픽스처 테스트만 완료된 상태이며, macOS는 테스트되지 않음.
  • Windows 바이너리는 CI에서 교차 컴파일해 각 GitHub 릴리스에 첨부됨. x64 Windows용 anyw.exe를 제공하므로 설치하는 컴퓨터에 Visual Studio나 MinGW가 필요하지 않음. Linux 빌드도 같은 방식으로 타르볼 형태로 제공됨.

사용법

  • anyw bat 실행 결과는 다음과 같이 경로별 일치 항목과 현재 선택된 항목을 표시함.
  • /usr/bin/bat — pacman의 bat 0.25.0-1, 활성 항목
  • /home/rokuroo/.cargo/bin/bat — cargo의 bat 0.24.0
  • 현재 선택된 항목: /usr/bin/bat(pacman의 bat 0.25.0-1)
  • anyw foobar처럼 일치 항목이 없으면 $PATH에 결과가 없고, 알려진 소스를 통해서도 설치되지 않았다는 메시지를 표시함.
  • 일치 항목이 없을 때 종료 코드는 1이므로 스크립트에서 사용할 수 있음.

플래그

  • --plain: 색상을 제외한 스크립트용 출력
  • --why: 각 $PATH 항목 아래에 해당 항목이 그 순위에 놓인 이유를 한 줄로 표시

빌드

  • cargo build --release로 빌드하면 바이너리가 target/release/anyw에 생성됨.
  • cargo test로 테스트를 실행함.

릴리스

  • git tag v0.2.0 && git push origin v0.2.0으로 태그를 푸시하면 릴리스 워크플로가 두 플랫폼용 바이너리를 빌드해 GitHub 릴리스에 첨부함.
  • 태그는 Cargo.toml의 버전과 일치해야 하며, 워크플로가 일치 여부를 검사하고 다르면 실행에 실패함.

라이선스

  • MIT 또는 Apache-2.0 이중 라이선스임.