diff --git a/developer/bin/list_loaded_launchjob_ids b/developer/bin/list_loaded_launchjob_ids new file mode 100755 index 0000000000..f0d2fce956 --- /dev/null +++ b/developer/bin/list_loaded_launchjob_ids @@ -0,0 +1,84 @@ +#!/bin/bash +# +# list_loaded_launchjob_ids +# + +### +### settings +### + +set -e # exit on any uncaught error +set +o histexpand # don't expand history expressions +shopt -s nocasematch # case-insensitive regular expressions + +### +### global variables +### + +### +### functions +### + +launchjob_id_source_1 () { + if [[ "$EUID" -ne 0 ]]; then + /usr/bin/sudo -p 'Optionally give your sudo password: ' -- /bin/launchctl list | /usr/bin/cut -f3 + fi +} + +launchjob_id_source_2 () { + /bin/launchctl list | /usr/bin/cut -f3 +} + +merge_sources () { + /usr/bin/sort | /usr/bin/uniq +} + +clean_sources () { + /usr/bin/egrep -v '^Label$' | \ + /usr/bin/egrep -v '^com\.apple\.' | \ + /usr/bin/egrep -v '^0x[0-9a-f]+\.anonymous\.' | \ + /usr/bin/egrep -v '^\[0x' | \ + /usr/bin/egrep -v '\.[0-9]+$' +} + +### +### main +### + +_list_loaded_launchjob_ids () { + + { + launchjob_id_source_1; + launchjob_id_source_2; + } | \ + clean_sources | \ + merge_sources + +} + +# process args +if [[ $1 =~ ^-+h(elp)?$ ]]; then + printf "list_loaded_launchjob_ids + +List IDs for currently-loaded launchctl jobs, which may be useful +in a Cask uninstall stanza, eg + + uninstall :launchctl => 'job.id.goes.here' + +If this command is not run as the superuser, you will be prompted +for a password to run a subcommand using 'sudo'. The password is +not required, but supplying it may reveal additional job ids. To +skip using the password, press repeatedly. + +Launchctl jobs attributed to Apple are excluded from the output. + +See CONTRIBUTING.md and 'man launchctl' for more information. + +" + exit +fi + +# dispatch main +_list_loaded_launchjob_ids "${@}" + +#