Nano Hash - криптовалюты, майнинг, программирование

Получить возвращаемое значение в оболочке из внешнего файла erlang

У меня есть файл сценария в erlang, который запускает некоторые модули. В оболочке erlang я хотел бы использовать возвращаемые объекты из функции запуска.

У меня есть мой файл:

-module(myfile).
main() ->
    %% do some operations
    MyReturnVar.

Я хочу, чтобы конечный пользователь мог манипулировать переменной MyReturnVar самым простым способом. В сценарии оболочки я делаю $ erl -s myfile main, который выполняет функцию в оболочке.

Есть ли способ получить MyReturnVar в оболочке?

Другой способ — загрузить модуль прямо из оболочки.

$ erl
1> X = myfile:main().

но мне не так нравится это решение, я бы хотел больше "одной команды" (или несколько подряд, которые я могу сделать в сценарии оболочки).

Спасибо

06.05.2012

Ответы:


1

Когда вы говорите несколько подряд, это звучит так, как будто вы хотите передать результат одной команды другой команде. Для этого вы не используете возвращаемое значение, которое может быть только int, а используете stdin и stdout. Это означает, что вы хотите напечатать MyReturnVar на стандартный вывод. Для этого у вас есть io:format. В зависимости от типа значения MyReturnVar вы должны сделать что-то вроде этого:

-module(myfile).
main() ->
    %% do some operations
    io:format("~w", [MyReturnVar]),
    MyReturnVar.

Теперь вы сможете передать результат своей команды другим процессам. Бывший:

$ erl -s myfile main | cat
06.05.2012
  • Нет, идея не в том, чтобы отображать результат в терминале, а в том, чтобы сказать пользователю, что просто выполните скрипт run.sh, и тогда вы окажетесь в оболочке erlang с необходимыми переменными. Я хочу иметь возможность выполнять другие операции erlang с этими переменными. Я просто хотел знать, что есть другой способ сделать это, кроме операции X = myfile:main(). 07.05.2012

  • 2

    Для этого вы можете (ab)использовать файл .erlang (см. справочную страницу erl(1)). Или покопайтесь в erlang-history .

    07.05.2012

    3

    Используйте esscript, если это возможно.

    $cat test.escript
    #!/usr/local/bin/escript 
    main([]) ->
            MyReturnVar=1,
            io:format("~w", [MyReturnVar]),
            halt(MyReturnVar).
    $escript test.escript 
    1
    $echo $?
    1
    

    Это распечатает MyReturnVar и вернет MyReturnVar, чтобы вы могли использовать его с каналом или просто поймать $? из сценария оболочки.

    08.05.2012
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..