Writing your own shell scripts
Written by Anachron on 2020-01-10
Read the article or go back.
The $SHELL
is a very famous place for linux enthusiasts and programmers.
Many people spend hours every day infront of a text console, inside their favourite $SHELL
.
Today I want to talk about why I keep (re)writing tools for my $SHELL
and what benefits (and problems) that brings.
# bldr: My Void Linux builder
In Void Linux we use xbps
and xbps-src
to build packages.
But those tools don’t come with all bells and wistles.
More stuff can be found in xtools
, though this collection is far from complete.
For someone who spends a lot of time trying and debugging this can become quite burdensome:
- No file-logging by default
- Tools are not glued together
- Combining actions easily not possible
So what bldr
allows me is to execute the following:
bldr -pn fff d
(or bldr -pn fff t l c b T p
respectively).
This runs the default actions for the fff
package which are:
t: Tabs (Convert spaces to tabs)
l: Lint (Check if package template is malformed)
c: Clean (Remove everything from build-dir)
b: Build (Build package)
T: Tree (List all contents of the build inside a tree)
p: Package (Create .xbps file for repo)
Example:
$ ls ~/.bldr/logs/fff-x86_64-*.log
/home/anon/.bldr/logs/fff-x86_64-build.log /home/anon/.bldr/logs/fff-x86_64-pkg.log
/home/anon/.bldr/logs/fff-x86_64-clean.log /home/anon/.bldr/logs/fff-x86_64-tree.log
/home/anon/.bldr/logs/fff-x86_64-lint.log
Inside /home/anon/.bldr/logs/fff-x86_64-tree.log
:
[12.01.2021-10:28:47] (fff) tree:start
/home/anon/.bldr/master/builddir/fff-2.2
├── LICENSE.md
├── Makefile
├── README.md
├── fff
└── fff.1
0 directories, 5 files
[12.01.2021-10:28:47] (fff) tree:finish (RC=0)
# mksh: Create shell scripts
Pretty simple script to create more shell-scripts when desired
#!/bin/sh
test -n "${1}" || exit 1
! test -f "${1}" || exit 2
cat > "${1}" << EOF
#!/bin/sh
EOF
test "$?" -eq 0 || exit 1
chmod +x "${1}"
"${EDITOR}" "${1}" || { rm "${1}"; exit 1; }
# ted: Edit scripts with your $EDITOR
This is just a wrapper around my $EDITOR
ENV for convinience.
This maybe could be an alias but I tinker around a lot so it’s easier and faster for me to keep it as a shell script.
#!/bin/sh
exec ${EDITOR} "${1}"
# tedw: Edit scripts from your $PATH
Most times when I need to edit scripts they are already in my $PATH
.
That`s where this little helper comes into play.
#!/bin/sh
w=$(which "${1}") || exit 1
exec ted "${w}"
I can easily edit my bldr
script from anywhere (given that its inside $PATH
) using tedw bldr
.
Comments (disabled for now)