트릭을 이용한 또 다른 형태의 Shebang 라인 테스트

ChatGPT를 통해 리서치를 해보다가, Java에도 JBang이라는 .NET 10의 File-based App과 비슷한 접근법을 별도의 CLI 툴을 통해서 구현한 것이 있다는 것을 알게되서 조금 찾아봤는데, 여기는 # 기호 대신 / 기호를 지시자로 사용하기 때문인지 보편적인 Shebang 라인을 사용하지 않는다는 것을 알게 되었습니다.

///usr/bin/env jbang "$0" "$@" ; exit $?
//DEPS com.sun.net.httpserver:http:20070405

아주 정교한 트릭인데, / 를 여러번 사용한다 하더라도 ///usr/bin/env 는 어차피 /usr/bin/env 로 궁극적으로는 해석이 된다는 트릭을 이용해서 그냥 /usr/bin/env 명령을 호출하는 것이고, # 지시자를 쓰지 못하기 때문에 좀 더 시작 라인이 번거로워지긴 하지만, 어쨌든 필요한 인자를 모두 지정해서 완전하게 만드는 것이 가능한 모양입니다. 물론, Java 문법적으로 봤을 때에는 저 부분이 그냥 주석이 됩니다.

당연히 .NET FBA에도 동일하게 적용해볼 수 있을 것이라 생각하여 테스트해봤습니다. C# 입장에서도 // 로 시작하면 주석으로 취급되는 것은 동일하므로 똑같이 적용이 되는 셈입니다.

///usr/bin/env dotnet "$0" "$@" ; exit $?
#:sdk Microsoft.NET.Sdk.Web
#:property PublishAot=False
#:package Microsoft.Playwright@1.54.0
...

아래처럼 WSL 2 환경에서 잘 작동했습니다.

4개의 좋아요

JBang에 대한 부연 설명을 좀 더 하면, JBang도 VS Code용 익스텐션을 프리뷰로 공개하였고 현재 활발하게 개발되고 있는 것으로 보입니다. JBang VS Code 익스텐션은 Redhat이 출시한 Java LSP 익스텐션을 기반으로 개발되고 있습니다.

.NET과는 달리 JBang CLI를 따로 설치해주어야 하고, 기본 프로필은 GraalVM 같은 AOT를 따로 사용하지 않는 그냥 바닐라 자바와 동일합니다. Grow up 기능의 경우, Export라는 이름으로 제공되어 JBang 파일을 Maven 프로젝트나 Gradle 프로젝트로 내보낼 수 있게 되어있습니다.

자세한 내용은 JBang All Documentation :: JBang 에서 확인해보실 수 있습니다. :smiley:

3개의 좋아요