#!/usr/bin/env bash
-USAGE="usage: ./process-pid.sh {[-h, -a], [-f, -e] <pid>}, -s <regexp>"
+USAGE="usage: $0 <pid> [-h, -a] [-f, -e] [-s <regexp>]"
+OPTIND=2
-# -h case
-if [[ "$1" -eq "-h" ]]; then
- echo "$USAGE"; exit 0
+if [[ ! "$1" =~ ^-?[0-9]+$ ]]; then
+ echo $USAGE; exit 1
-# <pid> case
-elif [[ "$1" =~ ^-?[0-9]+$ ]]; then
- if `ps $1 > /dev/null 2>&1`; then
- echo "you win!"; exit 0
+elif [[ ! -d /proc/$1 ]]; then
+ echo "invalid pid '$1'"; exit 1
+fi
- else
- echo -ne "invalid pid\n$USAGE"; exit 1
- fi
+echo -e "pid '${1}' refers to a running process.\n"
-# -e <pid> case
-elif [[ "$1" -eq "-e" && "$2" =~ ^-?[0-9]+$ ]]; then
- if `ps $2 > /dev/null 2>&1`; then
- echo "you win!"; exit 0;
+while getopts ":s:hafe" opts; do
+ case "${opts}" in
+ s)
+ cat /proc/"$1"/status | grep "$OPTARG"
+ ;;
+ h)
+ echo "$USAGE"; DROPBOOL=1
+ ;;
+ a)
+ echo "written by ian sutton."; if [[ $DROPBOOL ]]; then exit 0; fi
+ ;;
+ f)
+ ls /proc/"$1"
+ ;;
+ e)
+ if [[ ! `readlink /proc/$1/exe` ]]; then
+ echo "no permissions to read pid '$1's executable path"; exit 1
+ fi
- else
- echo -ne "invalid pid\n$USAGE"; exit 1
+ echo -n "executable path of pid '$1': "
+ readlink /proc/"$1"/exe
+ ;;
+ \?)
+ echo "bad option \"-$OPTARG\""; exit 1
+ ;;
+ :)
+ echo $USAGE; exit 1
+ ;;
+ esac
+ echo -ne "\n"
+done
+# -h case
+#if [[ "$1" -eq "-h" ]]; then
+# echo "$USAGE"; exit 0
+#
+# <pid> case
+#elif [[ "$1" =~ ^-?[0-9]+$ ]]; then
+# if `ps $1 > /dev/null 2>&1`; then
+# echo "you win!"; exit 0
+#
+# else
+# echo -ne "invalid pid\n$USAGE"; exit 1
+# fi
+#
+# -e <pid> case
+#elif [[ "$1" -eq "-e" && "$2" =~ ^-?[0-9]+$ ]]; then
+# if `ps $2 > /dev/null 2>&1`; then
+# echo "you win!"; exit 0;
+#
+# else
+# echo -ne "invalid pid\n$USAGE"; exit 1
+#
# -s <pid> <regex> case
-elif [[ "$1" -eq "-s" && "$2" =~ ^-?[0-9]+$ ]]; then
- if `ps $2 > /dev/null 2>&1`; then
- echo "you win!"; exit 0;
-
- else
- echo -ne "invalid pid\n$USAGE"; exit 1
-
-else
- echo "$USAGE"; exit 1
-fi
+#elif [[ "$1" -eq "-s" && "$2" =~ ^-?[0-9]+$ ]]; then
+# if `ps $2 > /dev/null 2>&1`; then
+# echo "you win!"; exit 0;
+#
+# else
+# echo -ne "invalid pid\n$USAGE"; exit 1
+#
+#else
+# echo "$USAGE"; exit 1
+#fi