kscript: Как получить каталог текущего файла?

Есть ли способ получить каталог текущего местоположения скрипта в скрипте kotlin?

Я мог бы добиться этого в bash с помощью

 dirname $0

или

# Absolute path to this script. /home/user/bin/foo.sh
SCRIPT=$(readlink -f $0)
# Absolute path this script is in. /home/user/bin
SCRIPTPATH=`dirname $SCRIPT`

2 ответа

Встроенное определение скрипта добавляет переменную в контекст скрипта. Доступ работает так, как вы ожидаете:

      println(__FILE__) // java.io.File object representing /home/user/bin/foo.main.kts (or wherever the script is)
println(__FILE__.parentFile) // java.io.File object representing /home/user/bin
println(__FILE__.absolutePath) // the string /home/user/bin/foo.main.kts
println(__FILE__.parent) // the string /home/user/bin

Вы также можете изменить имя переменной, используя аннотациюScriptFileLocation:

      @file:ScriptFileLocation("scriptPath")
println(scriptPath.absolutePath) // /home/user/bin/foo.main.kts

Имейте в виду, что автозаполнение IntelliJ не любит изменять имя переменной таким образом. :-)

Итак, как вы запускаете свой скрипт с помощьюkotlin-main-kts? В Kotlin 1.3.70 и более поздних версиях это так же просто, как убедиться, что имя вашего скрипта заканчивается на.main.kts. Компилятор автоматически применит этот специальный контекст, предоставляя вам доступ к__FILE__. Для получения дополнительной информации ознакомьтесь с репозиторием Kotlin здесь.

Вы можете использовать:

File(".")

и не забудьте import java.io.File

Другие вопросы по тегам