루아 독립 실행

루아 독립 실행 (Lua Standalone)

표준 루아 배포본에는 독립 실행(standalone) 인터프리터가 포함돼요. 이 인터프리터는 스크립트 파일이나 표준 입력에서 루아 프로그램을 읽어 실행하는 명령줄 프로그램이에요. 독립 실행 인터프리터는 <prefix>/bin/lua(또는 lua5.4)에 위치해요.

기본 사용법

독립 실행 인터프리터는 세 가지 방식으로 입력을 받아요.

  1. 파일 인자: lua [options] [script [args]]script 파일을 실행.
  2. 표준 입력: 인자가 없으면 표준 입력(stdin)을 실행.
  3. -e 옵션: 명령줄에서 직접 코드 조각을 실행.
lua script.lua               # 파일 실행
lua -e "print('hello')"      # 코드 직접 실행
lua                         # REPL (인터랙티브) 진입
echo "print(1)" | lua        # 표준 입력

REPL (Read-Eval-Print Loop)

인자 없이 실행하면 인터랙티브 모드가 되어, 사용자가 입력하는 각 줄을 읽고 평가하고 출력하는 REPL이 동작해요. 프롬프트는 보통 > 이고, 명령은 =로 시작하면 그 표현식의 결과를 출력해요 (예: = 1 + 1).

명령줄 옵션

독립 실행 인터프리터의 주요 옵션이에요.

  • -e stat — 문자열 stat을 실행해요. 청크 시작 부분에 들어가요.
  • -l mod — 실행 전에 mod 모듈을 require로 로드해요. -l mod=file 형식으로 모듈 이름을 지정할 수도 있어요.
  • -i — 대화형 모드로 진입 (스크립트 실행 후).
  • -v — 버전 정보 출력.
  • -E — 환경 변수를 무시해요 (아래 참조).
  • -W — 경고를 켜요.
  • -- — 옵션 처리를 중단하고 이후 인자를 스크립트 인자로 취급.
  • - — 표준 입력을 스크립트 인자로 취급.

옵션의 조합과 순서에 따라 동작이 정해져요. 예를 들어 -l 여러 개를 쓸 수 있고, -e도 그렇지만, -e 뒤의 문자열은 그대로 실행돼요.

환경 변수

독립 실행 인터프리터는 여러 환경 변수를 사용해요.

  • LUA_INIT — 인터프리터가 시작할 때 실행할 코드(@ 파일명 또는 코드 문자열)로, 기본값은 LUA_INIT_5_4도 고려해요.
  • LUA_PATHpackage.path의 기본값을 덮어써요.
  • LUA_CPATHpackage.cpath의 기본값을 덮어써요.
  • LUA_INIT / LUA_INIT_5_4 — 시작 코드.
  • LUA_ENV — 시작 환경(_ENV) 코드.
  • 기타 W(경고), LUA_GC_*(가비지 컬렉션 조정) 등.

-E 옵션은 이러한 환경 변수를 모두 무시하고 기본값으로 동작해요.

스크립트 인자

스크립트를 실행할 때, 명령줄의 스크립트 이름 다음의 인자들은 루아 프로그램에서 ...(vararg)로 접근할 수 있어요.

-- args.lua
print(...)

$ lua args.lua a b c
--> a b c

글로벌 테이블 arg에는 스크립트 이름(arg[0])과 인자들(arg[1]부터)이 들어 있어요. arg[-1]에는 인터프리터 이름이, arg[0]에는 스크립트 이름이 담겨요.

표준 라이브러리

독립 실행 인터프리터는 시작할 때 기본적으로 모든 표준 라이브러리(base, string, table, math, io, os, coroutine, utf8, debug)와 package를 로드해요. 따라서 io.open, os.time, string.format 등을 바로 쓸 수 있어요.

경고와 오류

독립 실행 인터프리터는 오류가 발생하면 오류 메시지를 표준 오류(stderr)에 출력하고 비-제로 종료 상태로 종료해요. -W로 경고를 켜면 경고도 출력돼요. 실행 중 보호되지 않은 오류는 "unprotected error in call to Lua API" 같은 메시지로 보고돼요.

독립 실행 인터프리터와 C API

독립 실행 인터프리터는 lua.c 소스 파일에 구현되어 있어요. 이것은 내장(embed)을 위한 예시로도 활용할 수 있는 루아 자체의 C 프로그램이에요. 애플리케이션에 루아를 내장할 때는 이 인터프리터 대신 C API를 직접 사용해요.

출처: 루아 독립 실행 (Lua Standalone)

본문

명령줄 예시

lua -e "print(os.date())"              # 현재 시각 출력
lua -e "print('a')" -e "print('b')"    # 여러 -e
lua -l utf8 -e "print(utf8.len('가'))"  # 모듈 로드 후 사용
lua -i script.lua                      # 스크립트 실행 후 REPL

종료 상태

독립 실행 인터프리터는 오류 시 비-제로 상태로 종료하고, 정상 종료 시 0을 반환해요. os.exit를 호출하면 그 코드로 종료할 수 있어요.

더 알아보기