Удалённый аккаунт
Serdy теперь в группе
Заха́р
Как выполнить в LUA скрипте bash скрипт с параметрами? Делаю так: #!/usr/bin/lua local params = {...} local arg = params[1] local scrpt = 'bash /home/user/sh/runner ' os.execute(scrpt .. arg) Но не работает. Если вместо скрипта указывать программу или команду, то работает. Что не так? Как сделать правильно?
Snusmumriken
Во-вторых, выполни ровно ту же команду в терминале. Работает? Не работает? Разбирайся.
Aqendo
Вопрос наподобие "было бы очень полезно если.... " Есть возможность каким угодно методом загрузить код и взять оттуда локальную переменную? Как на картинке: нужна переменная f.
Luсky
require, dofile
Aqendo
require, dofile
Не так?
Igor
Из нелегальных есть debug.* библиотека
Igor
Но она на то и debug, чтобы использовать её при дебаге
Igor
а вообще можно вернуть локальную переменную из файла, если тебе такой концепт подойдёт
Igor
Тогда никак
Igor
Либо из под сей лазить по луастейту, либо через дебаг библиотеку
Igor
https://www.lua.org/pil/23.1.2.html
Aqendo
Хорошо, благодарю вас. =)
Заха́р
fgntfg
Надо не в lua скрипте вызывать bash, а в bash скрипте вызывать lua
fgntfg
Почему?
Инкапсуляция
fgntfg
С уровня интерпретатора запускать команды уровня ниже мне кажется менее логичным
Aydar
С уровня интерпретатора запускать команды уровня ниже мне кажется менее логичным
Мнение имеет место быть, но луа в целом неплохо подходит для того чтобы склеить какие-то внешние утилиты и скрипты и по-моему не важно bash там запускать или что-то другое.
Aydar
Да, чаще всего такие решения не очень красивые но работают же. Баш сам по себе тоже не очень хороший и если у меня есть возможность хотя бы часть логики написать на луа то я так и сделаю.
Snusmumriken
Мне единственное что не нравится для этого у луа — отсутствие io.popen в обе стороны. Многие тулзы работают как "принимает фигню из stdin, выводит в stdout", и перехватывать обе штуки проблематично.
fgntfg
А rw в попен нельзя?
Snusmumriken
Не а
Snusmumriken
Я сам изгалялся с "пайпами", а ля луёвый скрипт: local in = io.popen("something > luajit mypipe.lua -r", "wb") local out = io.popen("luajit mypipe.lua -w") А промежуток хранится в редиске ))
Wsevolod
Можно как-то указать luarocks устанавливать только файлы библиотеки, без manifest, tests, бинарей etc? Как здесь с lua-cjson, к примеру: http://0x0.st/oH4R.txt
Vladislav
Ребзя привет. Такой вопросик один, какие есть внешние дебагеры типа gdb только для Lua? Если таковые вообще имеются
Luсky
ZeroBrane Studio - Lua IDE/editor/debugger for Windows, Mac OSX, and Linux https://studio.zerobrane.com/#:~:text=ZeroBrane%20Studio%20%2D%20Lua%20IDE%2Feditor,Windows%2C%20Mac%20OSX%2C%20and%20Linux&text=ZeroBrane%20Studio%20is%20a%20lightweight,LuaJIT%2C%20and%20other%20Lua%20engines.
Snusmumriken
Там есть дебаггер.
Vladislav
Там есть дебаггер.
его можно как-то отдельно извлечь?
Snusmumriken
его можно как-то отдельно извлечь?
https://github.com/pkulchenko/MobDebug Но вообще, в 99.99% случаев хватает обычных логов.
Snusmumriken
Это собственно то что в zerobrane сидит.
Vladislav
так, что-то он у меня не хочет становиться... У меня такие шаги: клоню гит в папку свою, запускаю mobdebug.lua а он не хочет
Snusmumriken
Что не хочет? Что говорит?
Vladislav
ща
Vladislav
lua: ./mobdebug.lua:99: module 'socket' not found: no field package.preload['socket'] no file '/usr/local/share/lua/5.3/socket.lua' no file '/usr/local/share/lua/5.3/socket/init.lua' no file '/usr/local/lib/lua/5.3/socket.lua' no file '/usr/local/lib/lua/5.3/socket/init.lua' no file '/usr/share/lua/5.3/socket.lua' no file '/usr/share/lua/5.3/socket/init.lua' no file './socket.lua' no file './socket/init.lua' no file '/usr/local/lib/lua/5.3/socket.so' no file '/usr/lib/x86_64-linux-gnu/lua/5.3/socket.so' no file '/usr/lib/lua/5.3/socket.so' no file '/usr/local/lib/lua/5.3/loadall.so' no file './socket.so' stack traceback: [C]: in function 'require' ./mobdebug.lua:99: in main chunk [C]: in ?
Vladislav
мб его в корень надо, а не в пользовательские папки?
Snusmumriken
Та-а-ак, начинаем стандартный урок разбора ошибок. Что в этой ошибке написано? Что она означает?
Vladislav
что модуль "сокет не найден". Не находит путь к нужным файлам
Snusmumriken
что модуль "сокет не найден". Не находит путь к нужным файлам
Модуль сокет. Что это за модуль сокет? И кстати, зачем он нужен?
Snusmumriken
Это сетевая библиотека. И она ставится отдельно.
usernameak
и самое главное: где этот модуль взять. и что с ним надо сделать после взятия и где его ложить
Vladislav
ниже что написано
стэк крашнулся?
Vladislav
аа
Snusmumriken
Ниже написан список путей, где луа пыталась искать сокет и не нашла.
Vladislav
еще и библеотеку ставить...
Snusmumriken
У луа нет в базовой поставке какой либо сети. Для расширения сети есть библиотека, настолько популярная что практически стандарт, и называется "луасокет".
Vladislav
а куда я репу клоню не важно, или нада именно в корень?
Snusmumriken
Когда ты будешь подключать mobdebug в проект, оно упадёт с ошибкой: "Не могу найти mobdebug, ищу тут и тут и тут" — смотришь где ищет, пихаешь туда где сможет найти, в один из путей.
Snusmumriken
Быстрее всего поставить сокет через луарокс: apt-get install luarocks luarocks install luasocket
Snusmumriken
Сокеты должны стоять и на удалённо дебагнутой машине, потому что и сервер работает на луасокете, и клиент, они через него связываются и собственно пересылают друг другу текст для команд-действий-результатов отладки.
Vladislav
у меня опять ошибка)
Vladislav
только она странная. У меня при установке сокета скрипт не может подключить lua.h
Vladislav
(:
Snusmumriken
Луасокет это наполовину компилируемая либа, она написана на сишке. Поставь девелоп версию луа apt-get install liblua5.3-dev Должно прокнуть.
Snusmumriken
Ля, ты что, на линуксе в первый раз сидишь? ))
Snusmumriken
Ну тады норм.
Vladislav
не особо в него вникал
Snusmumriken
Просто это стандартные штуки: если ты качаешь какую-то тулзу, а потом другую тулзу которая встраивается в первую — тебе нужна девелоперская версия первой, с заголовками и прочей ерундой, потому что вторая будет их требовать.
Vladislav
так, я установил mobdebug. Это же все?
Snusmumriken
Ну сокет и мобдебаг вроде всё )
Vladislav
спасибо большое
Vladislav
хотя было бы лучше, если бы можно было через gdb)
Snusmumriken
Всегда было бы лучше, если бы можно было нажать одну кнопку "сделать зашибись", но к сожалению это не так )