#!/bin/bash # Use bash's pipefail option to get errors during failure in a command # pipeline. This is useful to get notified about an error from dbus-send # when used with "|tail". set -o pipefail tty 2>&1 > /dev/null ISATTY=$? if [ "$ISATTY" = 0 ] then # rlwrap provides readline functionality for "read", which is more enhanced # than bash's "read" itself. RLWRAP=$(which rlwrap 2>/dev/null) if [ "$RLWRAP" != "" ] then if [ "$A_RERUN" = "" ] then A_RERUN="no" exec $RLWRAP $0 fi READ_CMD="read" else # No rlwrap: use bash's readline. READ_CMD="read -e" fi fi DBUS_SEND=dbus-send which ${DBUS_SEND} > /dev/null if test $? = 1 then echo "E: Unable to find" ${DBUS_SEND} exit 1 fi DBUS_PATH=/ DBUS_DEST=org.naquadah.awesome.awful DBUS_METHOD=${DBUS_DEST}.Remote.Eval a_dbus_send() { $DBUS_SEND --dest=$DBUS_DEST --type=method_call --print-reply \ $DBUS_PATH $DBUS_METHOD string:"$1" | tail -n +2 ret=$? if [ "$ret" != 0 ] && [ "$ISATTY" != 0 ]; then echo "E: $DBUS_SEND failed." >&2 exit $ret fi } if [ "$ISATTY" = 0 ] then while $READ_CMD -p "awesome# " -r line do a_dbus_send "$line" done else a_dbus_send "$(cat)" fi