I use fish most of the time as a shell, but I still write bash or even sh scripts, because fish is not installed on most systems. If you run a bash script from fish, it is still executed by bash (because of the shebang).
I use fish most of the time as a shell, but I still write bash or even sh scripts, because fish is not installed on most systems. If you run a bash script from fish, it is still executed by bash (because of the shebang).
# only test if the build succeeds
./build.py && ./test.py
didn't work in fish until recently. It used to be 'and' but they recently added && for compatibility.I think redirects and possibly pipelines work differently in fish too, although I don't remember the details. I type those on the command line frequently. I occasionally use loops as well, though when it gets big I do put it in a file.
echo hi > out.txt
echo append >> out.txt
sort < stdin.txt
ls /bad 2>&1 | tee out.txt
But here docs don't work the same way: sort <<EOF # syntax error in fish
I don't really like the here doc syntax so I guess that is pretty good. The && issue is still there on my Ubuntu Bionic machine: fish: Unsupported use of '&&'. In fish, please use 'COMMAND; and COMMAND'.
ls && lsvim (ls -lh | psub)
That point appealed me most. If I continue have to use bash for scripting, I wonder what fish provides over zsh.
Even though it's "sane", I would say it's not "powerful". It's significantly less powerful than bash, e.g. there is a list of missing things here:
https://github.com/pirate/fish-utils/blob/master/README.md
The first one seems like one of the bigger issues: https://github.com/fish-shell/fish-shell/issues/159
I have a particular viewpoint since I'm writing a shell for scripting, and I wrote this FAQ. http://www.oilshell.org/blog/2021/01/why-a-new-shell.html#wh...
But I didn't come up with that list of issues, and I've only used fish a tiny bit.
set file_contents (cat filename | string collect -N)
I understand that this is purely anecdotal, but I'm using fish for quite a long time, I've written a lot of tooling for myself in fish, and I agree that sometimes there are some things which are annoyingly missing from fish (like this multiline variable thing), but I would not say it makes fish significantly less powerful. And these things are sometimes fixed, too.I think their "sane" scripting is more about ux for writing short disposable logic (the type you write in a terminal), rather than more detailed/advanced/structured programming that you might save to a shell script file.
Bash/zsh walk the line of being usable enoughh for typing terse quick commands (terminal syntax) while also being complex enough for writing large scripts (programming language). They end up being imperfect at both.