| #!/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 | |||||