v5.0 is a massive release. It brings along changes to syntax, new operators as well as new builtins, reserved variables and a new event
Murex tries to retain backwards compatibility wherever possible. However sometimes changes need to be made to keep the language, shell and general usability moving forwards. The following are a list of such changes:
[alpha, numeric, underscore]\(...\)
will be parsed as a function rather than a string. eg command foo(bar baz)
where foo will be treated as a subshell function with bar baz as its parameters. Solution is simply to put that parameter inside quotation marks instead of leaving it as a bareword parameter%
will be first parsed as an expression. eg %(valid string)
vs (valid expression)
which might cause unexpected results in edge cases where a (string)
is also a valid expression. Please update (strings)
to include %
, eg %(string)
These are changes to Murex defaults, however you shouldn’t expect any breaking changes to Murex’s behaviour:
$ARGV
now preferred instead of $ARGS
($ARGS
will remain supported for now)command: parameters ...
style syntax has been deprecated in favour of the more traditional command parameters ...
(without a colon) syntax.Features marked as EXPERIMENTAL are provided without assurances of future breaking changes.
foobar = uptime()
(issue 676)echo uptime()
(issue 676)onSignalReceived
for catching OS signalssignal
for sending OS signalswhich
(issue 609)type
(issue 609)cd
defaults to ~
if now parameters are passed (issue 672)cd -
changes to previous directory (issue 672)$SELF.Interactive
value to detect if scope is running in an interactive shell (issue 685)$COLUMNS
reserved variable to output width of terminal$MUREX_ARGV
reserved variable to output command line parameters of Murex shell (not to be confused with the parameters of the running function, eg $ARGV
)format
from a table (eg csv
) to json
or yaml
will now return a map instead of an array of arrays (use jsonl
(jsonlines) if you need to retain a 2D array of data in JSON-like format)csv
data type and select
builtin now support converting maps (eg JSON objects) into tables (issue 689)murex-doc
/ help
can now display a greater number of documents when offlinealias
now stores FileRef
metadata (issue 124)murex-package remove
(issue 687)murex-package new
murex-package
: git. Which allows you to run git
commands on a package even when you’re not in that package’s working directoryup
and down
arrows on a partial command line will cycle through history of only lines that contain your partial command linectrl
+z
while readline is open will undo the previous key strokes||
and &&
(issue 708):=
, assigns a value but retains the former data type, thus converting the value when required (ideally I’d have preferred this as default option but it ran the risk of some serious and unexpected breaking changes to the behaviour of some existing shell scripts)$
sigils, eg foreach $var { ... }
works as well as foreach var { ... }
$MOD
, like $GLOBAL
but scoped to the module level<fid:VAR_NAME>
and <pid:VAR_NAME>
respectivelygcc
as well as go
compilers. The reduced cgo
footprint has already reduced file sizes by a 3rdconfig
functions (eg hint-text-func
) now execute with the FileRef
of the setter. Meaning they can call privates correctly$PWDHIST
was corrupting upon first updategit-commit
man page parsing, which caused the parser to hang and ramp up CPU usage on git
autocompletionsFileRef
either wasn’t being set, wasn’t being set correctly, or was missing a timestamp (issue 696)printf
dependency removed from aliases
function – this means aliases
now works on Windows too||
and &&
now parse correctly in expressionsSpecial thank yous for this release goes to the following contributors:
You rock!
Published: 07.09.2023 at 00:12
alias
): Create an alias for a commandwhich
): Locate command originevent
): Event driven programming for shell scriptsmurex-package
): Murex’s package managermurex-docs
): Displays the man pages for Murex builtinssignal
): Sends a signal RPCconfig
): Query or define Murex runtime settingsautocomplete
): Set definitions for tab-completion in the command lineARGV
(json): Array of the command name and parameters within a given scopeCOLUMNS
(int): Character width of terminalMUREX_ARGV
(json): Array of the command name and parameters passed to the current shellSELF
(json): Meta information about the running scope.csv
: CSV files (and other character delimited tables)float
(floating point number): Floating point number (primitive)onSignalReceived
: Trap OS signalsThis document was generated from gen/changelog/v5.0_doc.yaml.
This site's content is rebuilt automatically from murex's source code after each merge to the master
branch. Downloadable murex binaries are also built with the website.
Last built on Wed Sep 18 21:18:57 UTC 2024 against commit c037883c03788357164e9846c84d9f777251495d9452a8e.
Current version is 6.3.4225 (develop) which has been verified against tests cases.