
Fleck: A Lisp that runs wherever Bash is - rcarmo
https://github.com/chr15m/flk/
======
seisvelas
Cool! Aside from satisfying the preference for a non-Schemey syntax, what is
the advantage of Fleck over the Scheme shell (who's manual page contains this
classic gem of a rant:
[https://scsh.net/docu/html/man.html](https://scsh.net/docu/html/man.html)) or
the newer Racket Shell (unfortunately named Rash)?

~~~
75dvtwin
Speculating here... but in my reading:

Fleck does not require a compiled executable to be installed.

As long as you have bash Fleck will work. For scsh you have to have to install
platform specific executable. If it is available in a particular distro,
perhaps it is not that bad.

I write, these days, a lot of Ansible installation tools For Multiple versions
of (and almost bare) linux, freebsd, openbsd (and hopefully at some point for
DragonFlyBSD).

Today, I have to write shell-specific scripts to do application-centric
process management, application-centric backup preparation steps, health
monitors, smoke tests and so on.

To minimize my work, I instruct Ansible to preinstall bash everywhere... and
then I run the bash scripts.

But writing bash scripts is, well,... unsettling (hard to get used to
primitive return values, lack of normal enumerated parameter passing and so
on)

With Fleck (at least this is my reading), I will be able to install Fleck via
Ansible and then write all the scripts in Scheme (which I much prefer compared
to bash, zsh or anything else).

I guess, if, in the future, Fleck will help me to avoid worrying about
Powershell, kornshell and so on -- I would be delighted.

Sort of like shell-vm on top of base shells :-)

~~~
aasasd
> _I instruct Ansible to preinstall bash everywhere... and then I run the bash
> scripts_

Wait a minute. I may be mistaken, but I thought Ansible needed Python on the
managed machines, to run some of the modules. Afaik it uploads some Python
code via ssh before doing the work proper.

~~~
capableweb
I'm pretty sure Ansible doesn't _require_ python on the target machine as I've
run Ansible before with servers that didn't have python on them.

~~~
aasasd
Ah, yes, the ‘raw’ and ‘script’ modules can work without Python, so I guess
this makes 75dvtwin's workflow possible.

([https://docs.ansible.com/ansible/latest/installation_guide/i...](https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html#managed-
node-requirements))

------
aasasd
Afaik Mal makes interpreters, not transpiled Lisps like Clojure.

Notably, depending on the platform, transpiling on-the-fly may be feasible for
scripting. Fennel, on Lua, does its thing pretty damn fast even on my horribly
underpowered machine.

~~~
pjmlp
_Compiled_ Lisps like Clojure.

------
hellofunk
It explicitly says that it does not support clojure code, yet all examples use
the clojure file name extension. Weird. But still very cool nonetheless.

~~~
chr15m
It supports a limited subset of Clojure code. I will update the README to
reflect this more accurately, thanks for the feedback!

------
em-bee
i was hoping for a lisp-like syntax for bash commands, but this seems to do
something else.

to run a bash command i need to do: (sh __* "echo >&2 hello")

what i expected is: (echo >&2 hello)

or possibly (sh __* echo >&2 hello)

if i have to quote the whole bash command, then this becomes impractical
because it adds an additional quoting layer, and doesn't make bash quoting any
easier.

~~~
chr15m
This could be accomplished with a fairly simple macro. Patches welcome!

------
Terretta
> _Now you can use a humble LISP to do Bash things. Bash as a scripting
> language has many edges, but it is everywhere..._

Just in time ...

> _Starting with macOS Catalina, your Mac uses zsh as the default login shell
> and interactive shell. You can make zsh the default in earlier versions of
> macOS as well._

[https://support.apple.com/en-us/HT208050](https://support.apple.com/en-
us/HT208050)

~~~
ngcc_hk
What is your intent? The program need to go zsh?

~~~
skissane
Well, the big problem with bash on macOS is it is stuck on bash 3.x. FSF
changed license of bash, starting with 4.0, from GPLv2 to GPLv3, and Apple's
corporate policy says no GPLv3 allowed, so macOS stuck on bash 3.x. You write
a script on Linux using bash 4.x features, take it to run on macOS with bash
3.x and it doesn't work. (You can still install bash 4.x on macOS, but if you
have to install bash 4.x that gets rid of the argument "bash is everywhere and
we don't have to install it so that's why we use it instead of something
else".)

Apple is trying to move macOS users to zsh because they like the license (it
is MIT-like) and hence will be keeping up to date with new versions of it,
instead of being stuck in the past like they are with bash.

