Linux에서 Scala 스크립트를 독립적으로 만드는 방법은 무엇입니까?

Linux에서 Scala 스크립트를 독립적으로 만드는 방법은 무엇입니까?

스칼라 프로그래밍설명하다:

Scala에서 스크립트를 자주 사용하면 스크립트를 호출하는 것이 지루해집니다. Windows 및 Unix 계열 시스템에서는 scala 스크립트 파일 이름으로 호출할 필요가 없는 독립 실행형 Scala 스크립트를 생성할 수 있습니다. Unix 계열 시스템의 경우 다음 예에서는 실행 가능한 스크립트를 만드는 방법을 보여줍니다. chmod +x secho와 같이 권한을 실행 가능하게 만들어야 한다는 점을 기억하세요.

#!/bin/sh
# src/main/scala/progscala2/toolslibs/secho
exec scala "$0" "$@"
!#
print("You entered: ")
args.toList foreach { s => printf("%s ", s) }
println

사용 방법은 다음과 같습니다.

$ secho Hello World
You entered: Hello World

이것이 무엇을 의미하는지 알고 싶습니다.

# src/main/scala/progscala2/toolslibs/secho
exec scala "$0" "$@"
!#

존재하다 sh?

Scala 스크립트를 다음과 같이 독립형으로 만들 수 있습니다.

#!/path/to/scala
print("You entered: ")
args.toList foreach { s => printf("%s ", s) }
println

리눅스에서?

감사해요!

답변1

존재하다 sh,

# src/main/scala/progscala2/toolslibs/secho

무시된 댓글입니다.

exec scala "$0" "$@"

현재 프로세스가 자신을 으로 대체 scala하고 모든 셸 인수를 인수로 대체합니다.

!#

이 시점에서 쉘이 스크립트 읽기를 중지했으므로 아무런 효과가 없습니다.

그러나 Scala는 파일 시작 부분의 "헤더"를 무시하여 스크립트 파일을 처리합니다. 이 헤더는 #!(또는 Windows의 경우) 줄로 시작 ::#!하고 다음으로 끝납니다.일치 !#( ::!#) 또는/env. 제목은 한 줄이면 됩니다.

#!/path/to/scala
!#
print("You entered: ")
args.toList foreach { s => printf("%s ", s) }
println

그리고

#!/usr/bin/env scala
print("You entered: ")
args.toList foreach { s => printf("%s ", s) }
println

작업합니다(후자는 scala켜져 있어야 함 PATH). 후자는 다음과 같습니다.문서.

( 스칼라 에서는 주석 및 C의 .와 유사한 방식으로 에 의해 열린 "제목"을 닫는 데 사용되는 !#의 대칭입니다 .)#!#!/**/

관련 정보