Skip to content

Instantly share code, notes, and snippets.

Cole Tierney putnamhill

View GitHub Profile
View git-current-branch.md

Git current branch

The shell used in the following examples is bash, but the commands can be adapted for other shells.

reading it

Determine if working in a git repository

The goal here is to have a performant way to determine if we are in a git repo without printing anything.

git status --porcelain --untracked-files=no &>/dev/null && \
@putnamhill
putnamhill / ics2stdout.awk
Created Feb 23, 2019
an awk script to convert Apple's reminder lists to plain text
View ics2stdout.awk
#!/usr/bin/env awk -f
BEGIN {
FS = ":"
RS = "\r\n"
OFS = "\t"
}
/BEGIN:VTODO/ {
my_status = ""
@putnamhill
putnamhill / hdiutil-attach-detach.sh
Last active Jan 14, 2018
Steps to attach a dmg disk image using hdiutil while capturing the mount point and dev entry for detaching when done
View hdiutil-attach-detach.sh
#!/bin/bash
dmg_path="$1"
# use process redirection to capture the mount point and dev entry
IFS=$'\n' read -rd '\n' mount_point dev_entry < <(
# mount the diskimage (leave out -readonly if making changes to the file system)
hdiutil attach -readonly -plist "$dmg_path" | \
@putnamhill
putnamhill / ven-slice.pl
Last active Jan 11, 2018
Print items of in-list that are not in other-list; i.e. the relative complement of in-list and other-list.
View ven-slice.pl
#!/usr/bin/perl -w
use Getopt::Long;
# use diagnostics;
sub usage {
my $name = $0;
$name =~ s/.*\///;
print <<EOT;
Usage: $name [options] in-list other-list
@putnamhill
putnamhill / coinmarketcap-parse.sh
Created Nov 19, 2017
Reads the coinmarketcap ticker and writes the prices for a cryptocoins to a file
View coinmarketcap-parse.sh
#!/bin/bash
get_data() {
# if the parameter is a local file just cat it (for testing) otherwise try curl
{ test -r "$1" && cat "$1" || curl -s "$1"; } | \
jq --raw-output \
'.[] | "\(.symbol | ascii_downcase) \(.price_usd)"'
}
process() {
@putnamhill
putnamhill / git-bare-repo-commands.sh
Last active Dec 14, 2017
Steps to create a bare git repo
View git-bare-repo-commands.sh
## setting up a personal git repository that you can push change sets to
## ssh-host: a host defined in ~/.ssh/config (see: ssh_config(5))
## camaro: the name of the repo
# on a remote host or local filesystem:
git init --bare camaro.git # (option: use --shared if there are other contributors)
# on local host cd to camaro directory:
git remote add origin ssh-host:[path/]camaro.git
# (for origin on local filesystem: git remote add origin file:///media/volume-name/camaro.git)
@putnamhill
putnamhill / jq-snippets.sh
Last active Jan 13, 2018
collection of miscellaneous jq snippets
View jq-snippets.sh
# print value pairs from an array in lower case
jq --raw-output '.[] | "\(.key_1 | ascii_downcase) \(.key_2 | ascii_downcase)"'
# convert `key=value` lines into `{"key":"value"}` json
jq --raw-input 'split("=") | {(.[0]):.[1]}' some.conf | jq --slurp 'add'
# validate json (bad)
echo '{hello: "there"}' | jq . >/dev/null 2>&1 && echo good json || echo bad json
bad json
@putnamhill
putnamhill / private-ip.pl
Last active Dec 14, 2017
Reads ip addresses from the command line or stdin and prints them if they belong to any of the three RFC1918 private address blocks
View private-ip.pl
#!/usr/bin/perl -w
use Net::CIDR;
use Getopt::Long;
# Net::CIDR one liner:
# perl -mNet::CIDR -ne 'print if Net::CIDR::cidrlookup($_, ("10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"))'
#
# TODO: add ip address validation
View docker-snippets.sh
# Use awk to to redirect docker build output to stderr for visual feedback
# while capturing the image id on stdout when the build is sucessfull
ID=$(docker build . | awk '{print > "/dev/stderr"} END {if (/^Successfully built /) print $NF; else exit 1}')
# given docker volume path, return local storage path
doc2loc(){ docker inspect --format "{{range .Mounts}}{{if eq .Destination \"$1\"}}{{.Source}}{{end}}{{end}}" $2;}
@putnamhill
putnamhill / docker-rmi-interactive.sh
Last active Mar 26, 2016
A script to help clean up docker images interactively
View docker-rmi-interactive.sh
#!/bin/bash
agree() {
local question="$1"
while true; do
read -p "$question " answer
case $answer in
[Yy]|[Yy][Ee][Ss]) return 0 ;;
[Nn]|[Nn][Oo]|'') return 1 ;; # empty string is default
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.