| @@ -0,0 +1,136 @@ | |||
| #!/bin/bash | |||
| # These are all default values | |||
| REMOTE_IN_SSHCONFIG=-1 | |||
| REMOTE_USER="obsidianblk" | |||
| REMOTE_HOST="Trappist1" | |||
| REMOTE_PATH="/home/obsidianblk" | |||
| REMOTE_PORT=22 | |||
| MOUNT_POINT="$HOME/remote" | |||
| PORT_VAR="" | |||
| NEXT_ARG_IS_FILE=-1 | |||
| OP="" | |||
| SRC_FILE="" | |||
| URI="" | |||
| function usage() { | |||
| echo "Usage: $0 [-o <path to mount options>] mount|unmount|remount" | |||
| } | |||
| function defineURI() { | |||
| URI="$REMOTE_HOST:$REMOTE_PATH" | |||
| if [ $REMOTE_IN_SSHCONFIG -lt 0 ]; then | |||
| URI="$REMOTE_USER@$URI" | |||
| PORT_VAR="-p $REMOTE_PORT" | |||
| fi | |||
| } | |||
| if [[ "$#" -lt 1 ]]; then | |||
| echo "Missing operation argument." | |||
| usage | |||
| exit 1 | |||
| fi | |||
| for arg in "$@"; do | |||
| if [ $NEXT_ARG_IS_FILE -ge 0 ]; then | |||
| if [ -f "$arg" ]; then | |||
| SRC_FILE="$arg" | |||
| source "$arg" | |||
| NEXT_ARG_IS_FILE=-1 | |||
| else | |||
| echo "ERROR: Option file $arg missing or invalid." | |||
| usage | |||
| exit 1 | |||
| fi | |||
| else | |||
| case "$arg" in | |||
| mount) ;& | |||
| unmount) ;& | |||
| remount) | |||
| if [ "$OP" != "" ]; then | |||
| echo "ERROR: Multiple operations defined." | |||
| usage | |||
| exit 1 | |||
| fi | |||
| OP="$arg" | |||
| ;; | |||
| -o) | |||
| NEXT_ARG_IS_FILE=0 | |||
| ;; | |||
| esac | |||
| fi | |||
| done | |||
| if ! [[ -d "$MOUNT_POINT" ]]; then | |||
| echo "ERROR: [$MOUNT_POINT] does not exist or is not a directory." | |||
| usage | |||
| exit 1 | |||
| fi | |||
| case "$OP" in | |||
| mount) | |||
| defineURI | |||
| if ! mount | grep "$URI on $MOUNT_POINT" > /dev/null | |||
| then | |||
| echo "Mounting $URI on $MOUNT_POINT... " | |||
| sshfs -C $PORT_VAR -o reconnect,ServerAliveInterval=15,ServerAliveCountMax=3 $URI $MOUNT_POINT && | |||
| ( # Success | |||
| echo "Mounted." | |||
| notify-send -i server 'Successfully Mounted' "$URI" &> /dev/null | |||
| exit 0 | |||
| ) || | |||
| ( # Failure | |||
| echo "Mount Failed!" | |||
| notify-send -i error 'Failed to mount' "$URI" &> /dev/null | |||
| exit 1 | |||
| ) | |||
| else | |||
| echo "Remote folder is already mounted." | |||
| exit 1 | |||
| fi | |||
| ;; | |||
| unmount) | |||
| defineURI | |||
| echo "$URI" | |||
| if mount | grep "$URI on $MOUNT_POINT" > /dev/null | |||
| then | |||
| echo "Unmounting $URI from $MOUNT_POINT... " | |||
| fusermount -u $MOUNT_POINT && | |||
| ( # Success | |||
| echo "Unmount Successful." | |||
| notify-send -i server 'Successfully Unmounted' "$URI" &> /dev/null | |||
| exit 0 | |||
| ) || | |||
| ( # Failure | |||
| echo "FAILED to Unmount!" | |||
| notify-send error 'Failed to unmount' "$URI" &> /dev/null | |||
| exit 1 | |||
| ) | |||
| else | |||
| echo "Remote folder not mounted." | |||
| exit 1 | |||
| fi | |||
| ;; | |||
| remount) | |||
| $SRC_ARG="" | |||
| if $SRC_FILE != ""; then | |||
| SRC_ARG="-o $SRC_FILE" | |||
| fi | |||
| $0 unmount $SRC_ARG $OP && | |||
| $0 mount $SRC_SRG $OP | |||
| ;; | |||
| *) | |||
| usage | |||
| exit | |||
| ;; | |||
| esac | |||