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