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 Jan 15 23:07:50 UTC 2025 against commit b4c4296b4c429617fd41527ea0efef33c52c15ef2b64972.
Current version is 6.4.2063 (develop) which has been verified against tests cases.