Shell tips
Table of Contents
:ID: 3453ED9D-38E6-4EDA-9652-189BCABA429F
Just some various tips for writing shell scripts or doing cmd line stuff.
# Get the first n lines from STDOUT
We can use the head
program for this. head
will return the first n lines
of a file, but can be used with STDOUT
as well.
Example: get the docker image ID for the last created image.
docker images --format "{{.ID}}" | head -n 1
See also man head
# Forward arguments
Forward all arguments passed to a script to some other program called by the script.
$@
Represents all arguments, so in a script that does something with npm,
for example, we can forward all the arguments passed to the script to npm:
npm $@
# Default arguments
If a parameter is unset or null, use a default value.
See also https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Shell-Parameter-Expansion
npm run test ${FILE_PATH:-'tests/unit/**/*.spec.*(ts|js)'}
We can also set the parameter by using =
instead of -
above.
# List open files
Use lsof
It will include open sockets since anything IO is considered a file on a UNIX OS.
# Examples
# List Internet files
lsof -i
…on a specific port
lsof -i :3000
…or list all processes that are listening on some port
lsof -i -P -n | grep LISTEN
# Test if process is running
Here I wanted to test if reaper was already running before trying to start it.
I don’t want two instances of the program. Note the &
sends it to a subshell
(child process)
if ! [[ "`pidof -x reaper -o %PPID`" ]]; then reaper & fi