스칼라 프로그래밍말한다:
스칼라로 스크립트를 호출하는 것은 이러한 스크립트를 자주 사용하는 경우 지루합니다. 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
). 후자는 다음과 같습니다.문서.
( !#
는 의 대칭 이며 Scala에서 C의 주석 과 유사한 방식으로 에 #!
의해 열린 "헤더"를 닫는 데 사용됩니다 .)#!
/*
*/