#!/usr/bin/env bash # karen watches for signals and executes triggers in the events dir # karen gets triggered a lot check_root () { if [[ $UID != 0 ]]; then echo "Error: This script must be run as root." echo "Can I speak to a manager please?" exit 1 fi } check_if_not_already_running() { if ps ax | grep $0 | grep -v $$ | grep bash | grep -v grep then echo "karen is already running" exit 1 fi } check_dependencies () { for cmd in "$@"; do if ! command -v $cmd >/dev/null 2>&1; then echo "This script requires \"${cmd}\" to be installed" exit 1 fi done } check_root check_if_not_already_running check_dependencies fswatch readlink dirname if [[ -n "$1" ]]; then root_dir="$(readlink -f $1)" else root_dir="$(dirname $(readlink -f ${BASH_SOURCE[0]}))/events" fi signal_dir="$root_dir/signals" trigger_dir="$root_dir/triggers" if [[ ! -d "$root_dir" ]]; then echo "Root dir does not exist '$root_dir'" exit 1 fi echo "karen is running in $root_dir" fswatch -0 --event=PlatformSpecific $signal_dir | while read -d "" event; do signal="${event#"$signal_dir"}" signal="${signal#"/"}" trigger="$trigger_dir/$signal" args="" echo "Got signal: $signal" app_prefix="app-" if [[ "$signal" == "$app_prefix"* ]]; then # This is an app signal, let the app trigger handle it trigger="$trigger_dir/app" args="${signal#$app_prefix}" fi if test -x "$trigger"; then echo "karen is getting triggered!" "$trigger" $args & else echo "No trigger found" fi done