I like nushell, but I love xonsh. Xonsh is the bastard love child of Python and Bash.
it can be thought of as:
- try this statement in Python
- if there's an exception, try it in bash.
Now, that's not a very accurate description, because the reality is more nuanced, but it allows for things like:
for file in !(find | grep -i '[.]mp3^'):
file = Path(file.strip())
if file != Path('.') and file != file.with_suffix('.mp3'):
mv @(file) @(file.with_suffix('.mp3'))
Now, there are things in there I wouldn't bother with normally - like, rather than using mv, I'd just use file.rename(), but the snippet shows a couple of the tools for interaction between xonsh and sh.
- !(foo) - if writing python, execute foo, and return lines
- @(foo) - if writing sh, substitute with the value of the foo variable.
But, either a line is treated in a pyhony way, or in a shelly way - and if a line is shelly, you can reference Python variables or expressions via @(), and if it's Pythony, you can execute shell code with !() or $(), returning the lines or the exact value, respectively.
Granted, I love python and like shell well enough, and chimeras are my jam, so go figure.