69 lines
1.5 KiB
Bash
69 lines
1.5 KiB
Bash
|
function _scan_config
|
||
|
{
|
||
|
c="$HOME/.config/"; i=0 # for funny wc -l
|
||
|
while read dirname; do
|
||
|
if [ -d "$c$dirname" -a -a "$c$dirname/accounts" ]; then
|
||
|
dirs[$i]="$dirname"
|
||
|
i=$(($i+1))
|
||
|
fi
|
||
|
done <<< $(ls "$c")
|
||
|
}
|
||
|
|
||
|
function _select_conf
|
||
|
{
|
||
|
for n in "${dirs[@]}"; do
|
||
|
if [ "$1" == "$n" ]; then conf="$HOME/.config/$1/accounts"; fi
|
||
|
done
|
||
|
if [ -z "$conf" ]; then # Still haven't picked one means the input wasn't a valid target
|
||
|
echo "no such conf in $1 (specifically $HOME/.config/$1/accounts)"
|
||
|
return 1
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
function creds
|
||
|
{
|
||
|
local conf OPTIND # Specifically putting these on same line so I can have funny number of lines.
|
||
|
while getopts 'hpf:' o; do case "${o}" in
|
||
|
h) echo 'Usage: creds [-p] [-f conf file] [~/.config file] [account]'; return;;
|
||
|
p) print=set; break;;
|
||
|
f) conf=$OPTARG; break;;
|
||
|
esac done
|
||
|
shift $((OPTIND-1))
|
||
|
|
||
|
# Selecting config file
|
||
|
if [ -z "$conf" ]; then
|
||
|
declare -a dirs
|
||
|
_scan_config
|
||
|
# Displaying config files available
|
||
|
if [ -z "$1" ]; then
|
||
|
for n in "${dirs[@]}"; do echo $n; done
|
||
|
return
|
||
|
fi
|
||
|
_select_conf $1 || return
|
||
|
shift
|
||
|
fi
|
||
|
|
||
|
# Selecting account
|
||
|
# Displaying accounts is mashed up among it
|
||
|
local flag
|
||
|
while read lin; do
|
||
|
if [ -z $flag ]; then
|
||
|
if [ -z $1 ]; then
|
||
|
echo $lin
|
||
|
else
|
||
|
read headers <<< "$lin"
|
||
|
fi
|
||
|
else
|
||
|
read -a lin <<< "$lin"
|
||
|
if [ -z $1 ]; then
|
||
|
echo "${lin[0]}"
|
||
|
elif [ "$1" == "${lin[0]}" ]; then
|
||
|
if [ -z $print ]
|
||
|
then read $headers <<< ${lin[*]}
|
||
|
else echo ${lin[*]}
|
||
|
fi
|
||
|
fi
|
||
|
fi
|
||
|
flag=set
|
||
|
done < "$conf"
|
||
|
}
|