A smarter shell and scripting environment with advanced features designed for usability, safety and productivity (eg smarter DevOps tooling)
Despite this being a new major version release, it is a vary minor update.
Aside from a handful of bugfixes, the most significant change is notice of
deprecation for =
, let
, and ?
.
None
Please read out compatibility commitment to understand how features are deprecated.
the ?
pipe will be deprecated to make way for a the ternary operator. You can achieve the same result with <err> <!out>
, eg command <err> <!out> parameters... | next-command ...
the =
and let
builtins are now officially deprecated. They've been marked as deprecated in the documentation for a couple of years but you'll now receive a deprecation warning when using them. This warning will not impact any functions that call them (they bypass the STDOUT and STDERR pipes and write directly to your TTY) but it is still recommended that you update any existing code not to use it. The change is very simple, Murex supported expressions as first class primitives, so you can simply drop the =
and let
command names from your expressions
Features marked as EXPERIMENTAL are provided without assurances of future breaking changes. All other features are considered stable as part of Murex's compatibility commitment.
mxtty
terminal emulator (Github repo)which
and whereis
autocompletions were Linux specific. Now they're enabled for all platforms
grep
and egrep
aliases were Linux specific. Now they're enabled for all POSIX platforms
zero length environment variables are no longer being reported as null
by is-null
(issue #786)
fixed edge case where a zero length string could generate a panic when normalising paths (issue #789)
suppress sqlite3 cache error message. The error doesn't impact the operation of Murex, it just spooks users (issue #788)
Special thank yous for this release goes to everyone in the discussions group for raising bug reports and their design discussions.
You rock!
object builder %{}
was parsing bareword null
as "null"
(string with null) instead of a null value (issue #781)
variables were being tokenised in is-null
parameters instead of being passed by reference (issue #781)
bugfix release
runtime
flag for managing cache: --flush-cache
Windows, Linux and Darwin (macOS) now default to GCO-less builds of sqlite3
ANSI escape code for window title changes changed from xterm-specific standard (BELL
terminated) to ANSI standard (ST
terminated)
integrations and default profile scripts have all be rewritten to follow latest Murex code style best practices
Bugfix release:
runtime
flags for managing cache: --cache
and --trim-cache
cache: sqlite3 would lock cache.db
, breaking caching when multiple murex sessions were open at a time
cache: cache.db wasn't getting set in config
correctly (should have been enabled by default but was disabled by default instead)
Caching has been vastly improved in this release due to a new sqlite3-backed persistent cache.db
. There have also been some improvements to [f1]
help pages.
None
Please read out compatibility commitment to understand how features are deprecated.
?
pipe will be deprecated to make way for a the ternary operator. You can achieve the same result with <err> <!out>
, eg command <err> <!out> parameters... | next-command ...
persistent cache added using sqlite3 backend. This cache is optional however it is enabled by default. You can disable it by placing the following into your .murex_profile
:
config set shell cache.db-enabled false
new autocomplete
directive for [f1]
previews: DynamicPreview
dynamic previews added for git
and aws
export
now supports whitespace like an expression (issue #679)
bugfix: structures in variables would sometimes output base64 encoded values when converting those structures to arrays (issue #768)
some ReadArrayWithType()
calls weren't handling the returned error (if there were an error). They're now all surfacing errors correctly
whats new message moved to shell Start()
Special thank you to everyone in the community for raising bug reports and design discussions.
You rock!
The v5.2 release introduces significant new features and improvements for those using Murex as their interactive shell. Many of these features are unique to Murex.
Change to experimental feature: all lambda variables now follow the $.k
and $.v
convention (read more)
Murex now requires Go compiler version 1.20 or above, however a C compiler is no longer required (though still supported)
expressions that return a boolean will no longer write true
nor false
to stdout if it is followed by a boolean operator (&&
or ||
). This is marked as a breaking change because some of Murex's tests had to be updated to reflect this update, however this change actually fixes a number of bugs around expectations for how boolean expressions should work
Please read out compatibility commitment to understand how features are deprecated.
the ?
pipe will be deprecated to make way for a the ternary operator. You can achieve the same result with <err> <!out>
, eg command <err> <!out> parameters... | next-command ...
experimental TTY buffer was removed. This was disabled by default, would create a slight slow down to rendering when enabled, created a few rendering glitches when enabled, added to the overall code complexity, and the primary use case for this no longer requires buffering anyway
Features marked as EXPERIMENTAL are provided without assurances of future breaking changes. All other features are considered stable as part of Murex's compatibility commitment.
debug
builtin now supports { ... }
blocks (read more)
new flags for count
: --sum
/ -s
and --sum-strict
Lambda support for arrays and objects re-written and now considered stable (read more)
f9
command line preview added -- this feature allows you to quickly build and test pipelines that might otherwise require iterating on trial and error to get right
f1
autocomplete preview is no longer considered experimental. Several bug fixes included
new pipe: pty
. This behaves similarly to a regular pipe except it creates a pseudo-TTY
f1
preview now includes cheat sheets from https://cheat.sh/
job control: builtins can now be stopped via ^z
(issue #716)
docgen
has seen several new features added to improve the ease of writing documentation for Murex
readline: fixed regression bug introduced in preview release where vim keys wouldn't write their updated state to the terminal
f1
preview now resets the cursor position correctly when closed
f1
preview has had autocomplete parameters rewritten to jump to the right man
page flag more precisely
f1
preview scrolling had an off-by-one error resulting in the last line sometimes getting cropped
shebang (#!/path/to/murex
) scripts should be loaded into a module namespace. This fixes module scoped config (read more)
command lines passed via -c
flag (eg murex -c "out hello world"
) are also loaded into a module namespace
readline: trim whitespace before walking history
recommended optional builtins are now opt-out -- this is to make it easier to work with 3rd party package maintainers
job control: bug fixes around when to show and hide the interactive prompt (issue #716)
job control: processes invoked via bg {...}
now support being brought to the foreground via fg
(this could be argued as a new feature) (issue #716)
error handling added to get-type
(read more)
boolean expressions, eg 2+3==5
now work with boolean operators (&&
, ||
). eg $USER == "bob" && out "Hello Bob"
.
Special thank yous for this release goes to tiymat for their bug fixes and everyone in the discussions group for raising bug reports and design discussions.
You rock!
None.
Please read out compatibility commitment to understand how features are deprecated.
?
pipe will be deprecated to make way for a the ternary operator. You can achieve the same result with <err> <!out>
, eg command <err> <!out> parameters... | next-command ...
Features marked as EXPERIMENTAL are provided without assurances of future breaking changes.
new operator: null-coalescing
, returns the left-most non-null value (read more)
new operator: elvis
returns the left-most non-falsy value (read more)
new builtin: is-null
checks if a variable is undefined or null (read more)
new autocomplete: signal
error message for $1
variables, for when insufficient parameters passed, has been improved
website: minor stylesheet updates, plus some new images added
readline: buffered screen writes to reduce rendering glitches and improve overall responsiveness (issue #744)
autocomplete: gping
autocomplete updated to support --color
flag
Special thank yous for this release goes to the following contributors:
You rock!
[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%
will be first parsed as an expression. eg %(valid string)
vs (valid expression)
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.new website!!
commands can now be inlined in expressions, eg foobar = uptime()
(issue 676)
commands can also be inlined into statements too, eg echo uptime()
(issue 676)
new event onSignalReceived
for catching OS signals
new builtin signal
for sending OS signals
new builtins which
(issue 609)
new builtin 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
)
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 offline
improved man page parsing
improved man page displays in preview
alias
now stores FileRef
metadata (issue 124)
packages can now be removed via murex-package remove
(issue 687)
a package creation wizard has been added via murex-package new
another new flag for murex-package
: git. Which allows you to run git
commands on a package even when you're not in that package's working directory
version constraints added to Murex packages (docs to follow)
readline: up
and down
arrows on a partial command line will cycle through history of only lines that contain your partial command line
readline: new hotkey, ctrl
+z
while readline is open will undo the previous key strokes
EXPERIMENTAL: logical operators added to expressions: ||
and &&
(issue 708)
EXPERIMENTAL: new command modifier <pid:VARNAME>
sets $VARNAME with a commands process ID, if an external process (currently doesn't support local variables)
EXPERIMENTAL: new command modifier <fid:VARNAME>
sets $VARNAME with the Murex function ID of the command (currently doesn't support local variables)
EXPERIMENTAL: new assignment operator :=
, 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)
EXPERIMENTAL: Various builtins that require variable names now support $
sigils, eg foreach $var { ... }
works as well as foreach var { ... }
EXPERIMENTAL: new variable group $MOD
, like $GLOBAL
but scoped to the module level
EXPERIMENTAL: official support added for a pure Go library for sqlite3 -- thus saving individuals from having to install gcc
as well as go
compilers. The reduced cgo
footprint has already reduced file sizes by a 3rd
config
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!