EZFIO/Bash/ezfio.sh

267 lines
4.2 KiB
Bash

#!/bin/bash
#
# ezfio shell command with completion
#
EZFIO_ROOT=$( cd $(dirname "${BASH_SOURCE}")/.. ; pwd -P )
function _ezfio_py()
{
python2 ${EZFIO_ROOT}/Python/ezfio.py "$@"
}
function _ezfio_usage()
{
echo "
Usage:
ezfio set_file EZFIO_DIRECTORY
ezfio unset_file
ezfio has DIRECTORY ITEM
ezfio get DIRECTORY ITEM
ezfio set DIRECTORY ITEM VALUE : Scalar values
ezfio set DIRECTORY ITEM : Array values read from stdin
ezfio set_verbose
ezfio unset_verbose
"
}
function _require_ezfio_file()
{
if [[ -z ${EZFIO_FILE} ]]
then
echo "EZFIO directory not set: try 'ezfio set_file'"
return 1
fi
if [[ ! -d ${EZFIO_FILE} ]]
then
echo "EZFIO directory not accessible: try 'ezfio set_file'"
return 1
fi
}
function _require_first_argument()
{
if [[ -z $1 ]]
then
_ezfio_usage
echo "Error: First argument not set"
return 1
else
return 0
fi
}
function _require_second_argument()
{
if [[ -z $2 ]]
then
_ezfio_usage
echo "Error: Second argument not set"
return 1
fi
}
function _ezfio_set_verbose()
{
function _ezfio_info()
{
echo "$1"
}
return 0
}
function _ezfio_unset_verbose()
{
function _ezfio_info()
{
:
}
return 0
}
function _ezfio_set_file()
{
_require_first_argument "$@" || return 1
if [[ ! -d "$1" ]]
then
mkdir -p "$1" || return 1
fi
export EZFIO_FILE=$1
_ezfio_info "Set file ${EZFIO_FILE}"
return 0
}
function _ezfio_unset_file()
{
_require_ezfio_file || return 1
_ezfio_info "Unset file ${EZFIO_FILE}"
unset EZFIO_FILE
return 0
}
function _ezfio_has()
{
_require_ezfio_file || return 1
_require_first_argument "$@" || return 1
if [[ ! -d "${EZFIO_FILE}/${1,,}" ]]
then
return 1
fi
if [[ -z "$2" ]]
then
return 0
fi
_ezfio_py has $@ && return 0 || return 1
}
function _ezfio_get()
{
_require_ezfio_file || return 1
if [[ -z "$1" ]]
then
ls "${EZFIO_FILE}" && return 0 || return 1
fi
if [[ -z "$2" ]]
then
ls -- "${EZFIO_FILE}/${1,,}" && return 0 || return 1
fi
_ezfio_py get $@ && return 0 || return 1
}
function _ezfio_set()
{
_require_ezfio_file || return 1
_require_first_argument "$@" || return 1
_require_second_argument "$@" || return 2
if [[ -z $3 ]]
then
_ezfio_py set "$@" || return 1
else
echo "$3" | _ezfio_py set "$1" "$2" || return 1
fi
return 0
}
#---
function ezfio()
{
case $1 in
"has")
shift
_ezfio_has "$@"
;;
"set")
shift
_ezfio_set "$@"
;;
"get")
shift
_ezfio_get "$@"
;;
"set_file")
shift
_ezfio_set_file "$@"
;;
"unset_file")
shift
_ezfio_unset_file
;;
"set_verbose")
_ezfio_set_verbose
;;
"unset_verbose")
_ezfio_unset_verbose
;;
*)
_ezfio_usage
;;
esac
}
_ezfio_unset_verbose
# Completion
_Complete()
{
local cur
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
prev2="${COMP_WORDS[COMP_CWORD-2]}"
if [[ -n "${EZFIO_FILE}" && -d "${EZFIO_FILE}" ]]
then
case "${prev2}" in
set|has|get)
COMPREPLY=( $(compgen -W "$(cd "${EZFIO_FILE}/${prev}" ; ls | sed 's/\.gz//' )" -- $cur ) )
return 0
;;
esac
case "${prev}" in
unset_file|set_verbose|unset_verbose)
COMPREPLY=()
return 0
;;
set|has|get)
COMPREPLY=( $(compgen -W "$(cd "${EZFIO_FILE}" ; \ls -d */ | sed 's|/||g')" -- $cur ) )
return 0
;;
*)
COMPREPLY=( $(compgen -W 'has get set unset_file \
set_verbose unset_verbose -h' -- $cur ) )
return 0
;;
esac
else
case "${prev}" in
set_verbose|unset_verbose)
COMPREPLY=()
return 0
;;
set_file)
COMPREPLY=( $(compgen -W "$(\ls -d */ | sed 's|/||g')" -- ${cur} ) )
return 0
;;
*)
COMPREPLY=( $(compgen -W 'set_file \
set_verbose unset_verbose -h' -- $cur ) )
return 0
;;
esac
fi
}
complete -F _Complete ezfio