Подтвердить что ты не робот

Получить текущий рабочий каталог в Lua

Что Lua получит текущий рабочий каталог в Windows XP SP3 (или получить каталог текущего Lua файла)? Я предпочитаю не использовать LuaFileSystem.

Я не могу использовать os.execute("cd"), потому что os.execute всегда начинается с моего домашнего каталога (и поэтому всегда дает C:\Documents and Settings\username).

4b9b3361

Ответ 1

Lua по умолчанию не имеет "родного" способа поддержки концепции "текущего каталога" или, по сути, понятия "каталог".

Правильный способ получить текущий каталог - это библиотека, поддерживающая поддержку папки. Есть несколько - я рекомендую luafilesystem.

Как только он будет установлен, вы можете получить текущий каталог, выполнив:

lfs.currentdir()

Это будет работать с окнами, linux и mac.

Остерегайтесь того, что эти внешние библиотеки обычно включают некоторые бинарные пакеты. В зависимости от вашей настройки, возможно, вам придется скомпилировать ее, прежде чем использовать ее.

EDIT:

Обратите внимание, что когда файл включается через require, выражение {...}[1] возвращает путь, используемый директивой require. Это не совсем путь, потому что:

  • Он использует точки для разделения каталогов и подавляет .lua в конце файла.
  • Относительно пути, из которого инициализирован процесс lua
  • Это зависит от конфигурации package.path

Но если все, что вам нужно, это "требуемый путь" файла (возможно, для того, чтобы требовать файлы рядом с ним), вы можете получить его, выполнив это в самом начале файла:

local PATH = (...):match("(.+)%.[^%.]+$") or (...)

Если с require 'foo.bar.baz' требуется файл с именем baz.lua, то PATH будет foo.bar.

Ответ 2

может быть какой-то уродливый взломать как

current_dir=io.popen"cd":read'*l'

Ответ 3

Вы должны иметь доступ к текущему пути к файлу lua:

debug.getinfo(1).short_src;

или

debug.getinfo(1).source;

а затем текущий каталог с регулярным выражением:

string.gsub(debug.getinfo(1).short_src, "^(.+\\)[^\\]+$", "%1");

Изменить: на самом деле это работает только в том случае, если вы используете свой lua с полным путем. например: "lua.exe C:\test\test.lua" и NOT "lua.exe test.lua"

Ответ 4

У меня не было времени проверить это, но попробовали ли вы os.getenv прочитать переменные среды Windows?

В Windows есть переменная среды для текущего каталога: % CD%

os.getenv("CD")

Изменить: Протестировано в Windows 7 и при работе других переменных среды (т.е.% USERNAME% или% PROGRAMFILES%) CD var возвращает nil