.options file can be added into group folder to add ssh options for every file inside this group folder
79 lines
1.6 KiB
Bash
Executable File
79 lines
1.6 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# config
|
|
DIALOG=dialog #gdialog kdialog
|
|
START_DIR='~/.s3h'
|
|
|
|
if [[ $# -eq 1 && -d "$1" ]]; then
|
|
START_DIR="$1"
|
|
fi
|
|
|
|
# select config file
|
|
configFile=''
|
|
while [[ -z "$configFile" ]]; do
|
|
# init dir variable
|
|
if [[ -z "$dir" ]]; then
|
|
dir="$START_DIR"
|
|
fi
|
|
|
|
# add parent selector if not already in $START_DIR
|
|
if [[ "$START_DIR" == "$dir" ]]; then
|
|
para=()
|
|
else
|
|
para=(".." "<..>")
|
|
fi
|
|
|
|
# add directory selectors
|
|
dirs=`find $dir -mindepth 1 -maxdepth 1 ! -name '.*' -type d -printf "%f\n" |sort`
|
|
for d in $dirs; do
|
|
para+=("$d" "<$d>")
|
|
done
|
|
# add file selectors
|
|
files=`find $dir -mindepth 1 -maxdepth 1 ! -name '.*' -type f -printf "%f\n" |sort`
|
|
for d in $files; do
|
|
para+=("$d" "$d")
|
|
done
|
|
|
|
# run dialog
|
|
ret=$("$DIALOG" --no-tags --stdout --menu "select connection" 0 0 0 ${para[@]} 2>&1)
|
|
if [[ $? -ne 0 ]]; then
|
|
exit 1
|
|
fi
|
|
|
|
# sepcial handling of parent selector
|
|
if [[ "$ret" != ".." ]]; then
|
|
ret="$dir/$ret"
|
|
if [[ -d "$ret" ]]; then
|
|
dir=$ret
|
|
else
|
|
configFile=$ret
|
|
fi
|
|
else
|
|
dir=`dirname "$dir"`
|
|
fi
|
|
done
|
|
|
|
# read config file and connect
|
|
if [[ -f "$configFile" ]]; then
|
|
clear
|
|
# each line equals one config option
|
|
para=()
|
|
while read -r configLine; do
|
|
para+=($configLine)
|
|
done < "$configFile"
|
|
|
|
# lookup group specific option file
|
|
if [[ -f "$dir/.options" ]]; then
|
|
while read -r configLine; do
|
|
para+=($configLine)
|
|
done < "$dir/.options"
|
|
echo "using group options file '$dir/.options'"
|
|
fi
|
|
|
|
# clear screen // remove dialog colors
|
|
echo "config file '$configFile' selected. connecting..."
|
|
|
|
# execute ssh
|
|
ssh ${para[@]} `basename "$configFile"`
|
|
fi
|