Import environment — загрузка *.env файлов

Здесь обсуждается всё, что касается макросов.
User avatar
John Doe
Бюрократ
Posts: 14580
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

Import environment — загрузка *.env файлов

Post by John Doe »

Функции скрипта

  • Запуск из командной строки по префиксу env:.
    Рекомендуется назначить ассоциацию на *.env.
  • При загрузке макросов, может автоматически загружать файл autoload.env из
    пользовательской директории (см.)
  • Макрос, позволяющий выбрать файл для импорта из списка.
    Файлы читаются из пользовательской директории.
    Клавиатурную комбинацию для вызова нужно определить через опцию macrokey
    (по умолчанию не задана).

Пользовательская директория

По умолчанию:
  • Windows: %FARPROFILE%\.env
  • Linux (far2m): far.InMyConfig(".env")
Если эта директория отсутствует, то ищется директория .env рядом со скриптом.

Значение может быть переопределено через опцию envdir
(поддерживается cfgscript/ScriptsBrowser).

Командная строка

  • env:file.env
    Импорт окружения из заданного файла.
  • env:directory
    Чтение списка *.env-файлов из заданной директории,
    и выбор файла для импорта из списка.
  • env:/envdir
    Чтение списка *.env-файлов из пользовательской директории,
    и выбор файла для импорта из списка.
  • env:<command
    Запуск команды и импорт изменений из её окружения.
  • env:
    При запуске без параметров выводится эта справка.
Примечания:
  • При запуске через префикс имя файла/директории ожидаются без кавычек.
  • Возможен также запуск без установки:
    • lua:@impenv.lua "file.env".
    • Аналогично через LuaShell.

      Внимание: в этом случае использование кавычек обязательно.
      При необходимости указания символа <, он также помещается внутрь кавычек:
      lua:@impenv.lua "<command"

Формат *.env файлов

Code: Select all

#comment
var=value


Скачать: https://gist.github.com/johnd0e/252e6a3 ... e/main.zip
Last edited by John Doe on Tue 20 Aug, 2024 20:58, edited 2 times in total.
https://t.me/FarManager — Telegram чат
Shmuel
Posts: 7243
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 48 times
Been thanked: 635 times

Import environment — загрузка *.env файлов

Post by Shmuel »

Latest post of the previous page:

C:\Today>env:<1.bat
'1.bat' is not recognized as an internal or external command,
operable program or batch file.

Я что-то делаю не так?

P.S. Надо в скрипте вызывать far.ConvertPath, тогда сработает.
Last edited by Shmuel on Thu 22 Aug, 2024 16:19, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 14580
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

Import environment — загрузка *.env файлов

Post by John Doe »

Исправил
https://t.me/FarManager — Telegram чат
Yegor
Posts: 1505
Joined: Mon 04 Apr, 2005 13:41
Location: San Ramon, CA / Kharkov, UA
Has thanked: 52 times
Been thanked: 94 times

Import environment — загрузка *.env файлов

Post by Yegor »

Проверил базовую ф-ть env:<command, все работает (Windows only). Спасибо огромное. clear/reset наверное не особо важно, в крайнем случае всегда можно перезапустить фар.
Last edited by Yegor on Thu 22 Aug, 2024 16:59, edited 1 time in total.
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин
Shmuel
Posts: 7243
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 48 times
Been thanked: 635 times

Import environment — загрузка *.env файлов

Post by Shmuel »

В новой версии env:<1.bat работает.

Но есть и нерабочий сценарий.

-- Файл 111.lua
su = require 'sysutils'
su.SetEnv("birthday", "2000")

Запускаю env:<lua 111.lua - не работает
Запускаю env:<lua C:\Today\111.lua - не работает
Запускаю lua:@111.lua - работает

По-видимому решение в том, чтобы выставлять текущую директорию - вместо far.ConvertPath
User avatar
John Doe
Бюрократ
Posts: 14580
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

Import environment — загрузка *.env файлов

Post by John Doe »

Shmuel wrote: Thu 22 Aug, 2024 17:16 По-видимому решение в том, чтобы выставлять текущую директорию
Так и делается. Если не работает, то причина где-то в другом месте
https://t.me/FarManager — Telegram чат
Shmuel
Posts: 7243
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 48 times
Been thanked: 635 times

Import environment — загрузка *.env файлов

Post by Shmuel »

Linux
env:<export foo=bar работает
Эта же команда, помещённая в шелл-скрипт не работает.
User avatar
John Doe
Бюрократ
Posts: 14580
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

Import environment — загрузка *.env файлов

Post by John Doe »

Shmuel wrote: Thu 22 Aug, 2024 19:30 Эта же команда, помещённая в шелл-скрипт не работает.
Тут специалист по Linux shell нужен.
Можно попробовать вместо env использовать printenv или set.
https://t.me/FarManager — Telegram чат
Shmuel
Posts: 7243
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 48 times
Been thanked: 635 times

Import environment — загрузка *.env файлов

Post by Shmuel »

Shmuel wrote: Thu 22 Aug, 2024 19:30 Эта же команда, помещённая в шелл-скрипт не работает.
Удалось портировать FarCall Lua edition
User avatar
John Doe
Бюрократ
Posts: 14580
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

Import environment — загрузка *.env файлов

Post by John Doe »

Shmuel wrote: Fri 23 Aug, 2024 19:31 Удалось портировать FarCall Lua edition
  1. Если в качестве параметра передан не sh-скрипт, а произвольная команда (например lua-скрипт), тоже работает?
    Или инлайн команда типа var=value
  2. Помещать это всё во временный скрипт обязательно? win.system ". script.sh && env" не будет работать?
https://t.me/FarManager — Telegram чат
Shmuel
Posts: 7243
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 48 times
Been thanked: 635 times

Import environment — загрузка *.env файлов

Post by Shmuel »

John Doe wrote: Fri 23 Aug, 2024 21:18 Если в качестве параметра передан не sh-скрипт, а произвольная команда (например lua-скрипт), тоже работает?
Это буду ещё выяснять, пока что была задача портировать исходную функциональность.
John Doe wrote: Fri 23 Aug, 2024 21:18 Помещать это всё во временный скрипт обязательно? win.system ". script.sh && env" не будет работать?
Вроде бы вчерашние эксперименты закончились неудачей.
gotar
Posts: 519
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 31 times
Been thanked: 3 times

Import environment — загрузка *.env файлов

Post by gotar »

В unix, когда Вы запускаете shell script, он будет запускаться в отдельном процессе. Все изменения переменных окружения будут происходить в этом новом процессе, а не в исходном процессе в котором был вызван скрипт. когда шелл скрипт завершится завершится процесс который его исполнял и все изменения переменных окружения пропадут. чтобы команды из файла выполнялись без запуска нового шела нужно использовать команды source или . в зависимости от используемого shell. т.е аналогичная команда в unix, будет выглядеть примерно так sh -c ". /path/script.sh ; env"
Yegor
Posts: 1505
Joined: Mon 04 Apr, 2005 13:41
Location: San Ramon, CA / Kharkov, UA
Has thanked: 52 times
Been thanked: 94 times

Import environment — загрузка *.env файлов

Post by Yegor »

John Doe, из t-чата:

Если сделать файл autoload.env следующего содержания:

Code: Select all

PATH=C:\Test;%PATH%
То %PATH% не раскрывается. А хотелось бы.
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин
User avatar
John Doe
Бюрократ
Posts: 14580
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

Import environment — загрузка *.env файлов

Post by John Doe »

Сходу не решу насколько эта фича подходит данному скрипту.
Но если хотите, то в функции importEnv можно перед вызовом win.SetEnv(var,val) добавить строку

Code: Select all

if var=="PATH" then val = val:gsub("%%([%w_]-)%%", win.GetEnv) end
https://t.me/FarManager — Telegram чат
Shmuel
Posts: 7243
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 48 times
Been thanked: 635 times

Import environment — загрузка *.env файлов

Post by Shmuel »

John Doe wrote: Sun 24 Aug, 2025 17:50 if var=="PATH then val = val:gsub("%%([%w_]-)%%", win.GetEnv) end
Наверное лучше if var=="PATH" then val = val:gsub("%%(.-)%%", win.GetEnv) end (2 исправления).
User avatar
John Doe
Бюрократ
Posts: 14580
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

Import environment — загрузка *.env файлов

Post by John Doe »

Строго говоря вообще "%%PATH%%", но не суть.
Shmuel
Posts: 7243
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 48 times
Been thanked: 635 times

Import environment — загрузка *.env файлов

Post by Shmuel »

Я смотрел без контекста, только на последнее сообщение, но не суть.
Post Reply

Return to “Обсуждение макросов”