재현 가능한 인터프리터 스크립트#

Author:

Solène Rapenne @rapenne-s

Editor:

Valentin Gagarin @fricklerhandwerk

이 튜토리얼에서는 Nix를 사용하여 셔뱅 스크립트라고도 하는 재현 가능한 인터프리터 스크립트를 만들고 실행하는 방법을 배웁니다.

요구 사항#

의존성이 간단하지 않은 간단한 스크립트#

URL의 XML 콘텐츠를 가져와 JSON으로 변환하고 읽기 쉽게 서식을 지정하는 다음 스크립트를 살펴보십시오.

#! /bin/bash

curl https://github.com/NixOS/nixpkgs/releases.atom | xml2json | jq .

이 스크립트에는 curl, xml2json, jq 프로그램이 필요합니다. 또한 bash 인터프리터도 필요합니다. 스크립트를 실행하는 시스템에 이 의존성 중 하나라도 없으면 스크립트는 부분적으로 또는 완전히 실패합니다.

Nix를 사용하면 모든 의존성을 명시적으로 선언할 수 있으며, Nix를 지원하고 Nixpkgs에서 가져온 필요한 패키지를 사용할 수 있는 모든 머신에서 항상 실행되는 스크립트를 만들 수 있습니다.

스크립트#

셔뱅은 인터프리터 스크립트를 실행하는 데 어떤 프로그램을 사용할지 결정합니다.

여기서는 셔뱅 줄 #!/usr/bin/env nix-shell을 사용합니다.

env는 대부분의 최신 유닉스 계열 운영 체제에서 파일 시스템 경로 /usr/bin/env에 있는 프로그램입니다. 이 프로그램은 명령 이름을 인수로 받아, 환경 변수 $PATH에 나열된 디렉터리에서 해당 이름으로 처음 찾은 실행 파일을 실행합니다.

여기서는 nix-shell을 셔뱅 인터프리터로 사용합니다. 이 사용 사례와 관련된 매개변수는 다음과 같습니다.

  • -i는 파일의 나머지 부분을 해석하는 데 사용할 프로그램을 지정합니다

  • --pure는 스크립트를 실행할 때 대부분의 환경 변수를 제외합니다

  • -p는 인터프리터 환경에 있어야 하는 패키지를 나열합니다

  • -I는 패키지의 검색 경로를 명시적으로 설정합니다

옵션에 대한 자세한 내용은 nix-shell 참조 문서에서 확인할 수 있습니다.

다음 내용으로 nixpkgs-releases.sh라는 파일을 만드십시오.

#!/usr/bin/env nix-shell
#! nix-shell -i bash --pure
#! nix-shell -p bash cacert curl jq python3Packages.xmljson
#! nix-shell -I nixpkgs=https://github.com/NixOS/nixpkgs/archive/2a601aafdc5605a5133a2ca506a34a3a73377247.tar.gz

curl https://github.com/NixOS/nixpkgs/releases.atom | xml2json | jq .

첫 번째 줄은 표준 셔뱅입니다. 추가 셔뱅 줄은 Nix 고유의 구문입니다.

  • -i 옵션으로 bash를 파일의 나머지 부분에 대한 인터프리터로 지정합니다.

  • 이 경우 스크립트가 실행되는 시스템에 이미 있을 수 있는 프로그램을 스크립트가 암묵적으로 사용하지 않도록 --pure 옵션을 활성화합니다.

  • -p 옵션은 스크립트 실행에 필요한 패키지를 나열합니다.

    xml2json 명령은 python3Packages.xmljson 패키지가 제공하고, bash, jq, curl은 같은 이름의 패키지가 제공합니다. SSL 인증이 작동하려면 cacert가 있어야 합니다.

    팁

    필요한 프로그램을 제공하는 패키지를 찾으려면 search.nixos.org를 사용하십시오.

  • -I의 매개변수는 Nixpkgs 저장소의 특정 Git 커밋을 가리킵니다.

    이를 통해 스크립트는 어디에서나 항상 정확히 같은 패키지 버전으로 실행됩니다.

스크립트를 실행 가능하게 만드십시오:

chmod +x nixpkgs-releases.sh

스크립트를 실행하십시오:

./nixpkgs-releases.sh

다음 단계#