Files
aliases-and-functions/.shell_functions
chawley (penguin) 8a6f0a1723 Added CHANGELOG function
A basic function to generate CHANGELOG.md from the last 25 commits in a
repository.
2025-04-24 19:37:20 -04:00

115 lines
2.8 KiB
Plaintext

# Shell Functions
# Shell note pad
note () {
# if file doesn't exist, create it
if [[ ! -f $HOME/.notes ]]; then
touch "$HOME/.notes"
fi
if ! (($#)); then
# no arguments, print file
cat "$HOME/.notes"
elif [[ "$1" == "-c" ]]; then
# clear file
echo -n "Clear notes file? [Y/N] "
read replace
if [ "${replace}" = "Y" ] || [ "${replace}" = "y" ]; then
echo "Emptying notes file..."
printf "%s" > "$HOME/.notes"
echo "Done."
else
echo "Notes file preserved."
fi
else
# add all arguments to file
echo -n $(date +"%F %T | ") >> "$HOME/.notes"
printf "%s\n" "$*" >> "$HOME/.notes"
fi
}
# tar/gzip a directory
# I use this before 'rm -rf'ing a directory I think is useless
# if nothing breaks after a predetermined amount of time, then the tar file is safe to delete
tardir() {
#ensure $1 is a directory
if [ ! -d "${1}" ]; then
echo "$1 is not a directory. Aborting."
return 1
fi
#strip trailing slash
target="${1%/}"
echo "Dir size: $(du -hs ${target})"
tar czf "${target}".tar.gz "${target}"
echo "Archive size: $(du -hs ${target}.tar.gz)"
}
# Replacement for 'for i in $(ls); do du -hs $i; done' that handles spaces
function dudir() {
if ! (($#)); then
dir=$(pwd)
else
dir="${1}"
fi
# redefine $IFS
o=$IFS
IFS=$(echo -en "\n\b")
for i in $(ls "${dir}"); do
du -hs "${i}"
done
# reset $IFS
IFS=$o
}
# HAHA! Weather in the terminal
weather() {
if [ $(command -v curl) ]; then
if ! (($#)); then
curl wttr.in/44113
else
curl wttr.in/$1
fi
else
echo "curl not installed. Aborting."
fi
}
# Replaces "ps aux | grep <something>" with "psaux <something>". Shorter to type, more informational and doesn't include the command itself in the output.
psaux () { pgrep -f "$@" | xargs ps -fp 2>/dev/null; }
# mail a file
email() {
if ! (($#)); then
echo "USAGE: email {filename} {email-address}"
return 1
else
efile=${1}
eaddr=${2}
echo "See Attached" | mail -s "File: ${efile}" -a ${efile} ${2}
fi
}
# git testmerge
testmerge() {
echo "git merge --no-commit --no-ff $1"
git merge --no-commit --no-ff $1
echo "git diff --cached"
git diff --cached
echo "'git merge --abort' when done"
}
git_changelog() {
echo "# Last 25 Commits" > CHANGELOG.md # Add the header
git log --pretty=format:"%h|%ad|%an|%s" --date=short -n 25 | \
awk -F'|' '{
printf "## %s (%s, %s) - %s\n\n", $1, $3, $2, $4;
commit_hash = $1;
cmd = "git show -s --format='%x09%b' " commit_hash;
while ((cmd | getline line) > 0) {
printf "%s\n", line;
}
close(cmd);
printf "\n";
}' >> CHANGELOG.md
}