id = "erlang"
name = "Erlang/OTP"
homepage = "https://www.erlang.org"
description = "A programming language used to build massively scalable soft real-time systems."
executables = ["erl", "erlc"]
[dotfiles]
paths = ["~/.erlang"]
exclude = []
secret = []
side_effect = false
[commands]
format = 1
label = "Start the Erlang shell"
description = "Start an Erlang/OTP runtime (erl): run an expression, set the code path, or start or attach to a distributed node. Compiling with erlc and emulator (+) flags are left out."
quality = "ai-draft"
parser = { end_of_options = "--", interleave = "permute", long_equals = false, short_attached = false, short_bundles = false }
[[commands.source]]
id = "docs"
kind = "manual"
url = "https://www.erlang.org/doc/apps/erts/erl_cmd.html"
revision = "OTP 29.1"
evidence = """
erl documentation, https://www.erlang.org/doc/apps/erts/erl_cmd.html (the form drives erl; erlc is not covered)
-eval Expr (init flag) - Makes init evaluate the expression Expr
-noshell - Starts an Erlang runtime system with no shell.
-noinput - Ensures that the Erlang runtime system never tries to read any input. Implies -noshell.
-name Name - Makes the Erlang runtime system into a distributed node. The node name will be Name@Host. For short names, use flag -sname instead.
-setcookie Cookie - Sets the magic cookie of the node to Cookie
-pa Dir1 Dir2 ... - Adds the specified directories to the beginning of the code path
-pz Dir1 Dir2 ... - Adds the specified directories to the end of the code path
-remsh Node - Starts Erlang with a remote shell connected to Node.
-detached - Starts the Erlang runtime system detached from the system console.
-hidden - Starts the Erlang runtime system as a hidden node
-boot File - Specifies the name of the boot file
-config Config
-s Mod [Func [Arg1, Arg2, ...]] (init flag) - Makes init call the specified function.
-sname arnie +S 2 -s my_init -extra +bertie
"""
[[commands.field]]
id = "sname"
label = "Short node name"
description = "Start a distributed node with a short name."
type = "string"
option = ["-sname"]
sources = ["docs"]
[[commands.field]]
id = "name"
label = "Long node name"
description = "Start a distributed node named Name@Host."
type = "string"
option = ["-name"]
sources = ["docs"]
[[commands.field]]
id = "setcookie"
label = "Cookie"
type = "string"
option = ["-setcookie"]
sources = ["docs"]
[[commands.field]]
id = "remsh"
label = "Remote shell to node"
description = "Connect a remote shell to this node, for example node@host."
type = "string"
option = ["-remsh"]
sources = ["docs"]
[[commands.field]]
id = "eval"
label = "Evaluate expression"
description = "Erlang expression to evaluate at startup, for example io:format(\"hi~n\")."
type = "string"
option = ["-eval"]
sources = ["docs"]
[[commands.field]]
id = "noshell"
label = "No shell"
description = "Run without an interactive shell, for scripts and pipes."
type = "boolean"
option = ["-noshell"]
sources = ["docs"]
[[commands.field]]
id = "noinput"
label = "No input"
type = "boolean"
option = ["-noinput"]
sources = ["docs"]
[[commands.field]]
id = "pa"
label = "Prepend code path"
type = "path"
option = ["-pa"]
path = { kind = "directory", role = "input", must_exist = true }
sources = ["docs"]
[[commands.field]]
id = "pz"
label = "Append code path"
type = "path"
option = ["-pz"]
path = { kind = "directory", role = "input", must_exist = true }
sources = ["docs"]
[[commands.field]]
id = "boot"
label = "Boot file"
type = "string"
option = ["-boot"]
sources = ["docs"]
[[commands.field]]
id = "config"
label = "Config file"
description = "Config file name without the .config extension."
type = "string"
option = ["-config"]
sources = ["docs"]
[[commands.field]]
id = "hidden"
label = "Hidden node"
type = "boolean"
option = ["-hidden"]
sources = ["docs"]
[[commands.field]]
id = "detached"
label = "Run detached"
type = "boolean"
option = ["-detached"]
sources = ["docs"]
[[commands.task]]
id = "shell"
label = "Start a shell with code path"
fields = ["pa", "sname", "setcookie"]
[[commands.task]]
id = "script"
label = "Run an expression and exit"
fields = ["eval", "noshell", "pa"]
required = ["eval"]
set = { noshell = [true] }
[[commands.task]]
id = "remote"
label = "Attach to a running node"
fields = ["remsh", "sname", "setcookie"]
required = ["remsh"]
[[commands.group]]
id = "basic"
label = "Basic"
fields = ["sname", "name", "setcookie", "remsh", "eval", "noshell", "pa"]
[[commands.group]]
id = "advanced"
label = "Advanced"
fields = ["noinput", "pz", "boot", "config", "hidden", "detached"]