0,0 → 1,316 |
#!/bin/bash |
|
# Get the directory of this script (also works with symlinks) |
# http://stackoverflow.com/questions/59895/can-a-bash-script-tell-what-directory-its-stored-in |
SOURCE="${BASH_SOURCE[0]}" |
while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink |
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" |
SOURCE="$(readlink "$SOURCE")" |
[[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located |
done |
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" |
|
# ToDo for Future: Implement getopt |
if [[ "$1" == "--batchmode" ]]; then |
IS_BATCHMODE=1 |
else |
IS_BATCHMODE=0 |
fi |
|
# Read in the system identifier |
if [ $IS_BATCHMODE -eq 0 ]; then |
echo "Terminal Stackman 2.3" |
echo "(C) 2013-2017 ViaThinkSoft" |
echo "" |
|
if [ -f ~/".autorun" ]; then |
echo "Starting autorun script..." |
~/".autorun" |
echo "" |
fi |
|
sysid=$( "$DIR"/sysname ) |
echo "System ID: lta:$sysid" |
echo "" |
echo "Enter '-help' for available commands." |
echo "" |
fi |
|
# Check MySQL config |
"$DIR"/check_db_conn -q |
if [ $? -ne 0 ]; then |
# TODO: fragen ob man write_stam_config aufrufen möchte |
exit 1 |
fi |
|
DEFAULTCAT="." |
|
CURCAT="$DEFAULTCAT" |
PREV_CAT="$DEFAULTCAT" |
LAST_ID=-1 |
|
echo_yellow() { |
echo -ne "\033[1;33;40m" |
echo "$*" |
echo -ne "\033[0m" |
} |
|
echo_red() { |
echo -ne "\033[1;31;40m" |
echo "$*" |
echo -ne "\033[0m" |
} |
|
echo_cyan() { |
echo -ne "\033[1;36;40m" |
echo "$*" |
echo -ne "\033[0m" |
} |
|
echo_green() { |
echo -ne "\033[1;32;40m" |
echo "$*" |
echo -ne "\033[0m" |
} |
|
# Main menu |
while (( 1 )); do |
# Warning if category does not exist yet. |
"$DIR"/exists1 "$CURCAT" |
if [ $? -eq 1 ]; then |
SIGN="*" |
else |
SIGN="+" |
fi |
|
# "-r" übernimmt alle "\". gut für z.B. "\\netbios\", schlecht für "\" am zeilenende, um weiterzuschreiben |
read -erp "<$CURCAT> $SIGN " inp |
if [[ $? -gt 0 ]]; then |
# For example end of stream -- exit |
break |
fi |
|
# Log to journal |
echo "$inp" >> ~/.stam_history |
if [ -f ~/.stam_history_mir ]; then |
echo "$inp" >> ~/.stam_history_mir |
fi |
|
# Split command and (single combined) argument |
cmd=$( echo "$inp" | cut -d " " -f 1 ) |
arg=$( echo "$inp" | cut -s -d " " -f 2- ) |
|
# Commands begin with '-'. The first character can be escaped by using '--' |
echo "$cmd" | grep -E "^-" > /dev/null |
COMMANDMODE=$? |
echo "$cmd" | grep -E "^--" > /dev/null |
if [ $? -eq 0 ]; then |
cmd="${cmd:1}" |
# 1=nein, 0=ja |
COMMANDMODE=1 |
fi |
|
# Category will be changed with '#'. The first character can be escaped by using '##' |
echo "$cmd" | grep -E "^#" > /dev/null |
CATCHANGE=$? |
echo "$cmd" | grep -E "^##" > /dev/null |
if [ $? -eq 0 ]; then |
cmd="${cmd:1}" |
# 1=nein, 0=ja |
CATCHANGE=1 |
fi |
|
if [ $CATCHANGE -eq 0 ]; then |
PREV_CAT="$CURCAT" |
|
# Change category: "#<cat>" |
cmd="-" |
arg=$( echo "$inp" | sed 's/^#//' ) |
|
# Do not allow empty category (reserved for '*') |
if [[ "$arg" == "" ]]; then |
# echo_red "[!] FATAL ERROR: Category cannot be empty!" |
# continue |
arg="$DEFAULTCAT" |
fi |
|
# change category |
CURCAT="$arg" |
|
# if [ $IS_BATCHMODE -eq 0 ]; then |
# echo_green "Your category is now '$CURCAT'" |
# fi |
|
# Warning if category does not exist yet. |
"$DIR"/exists1 "$CURCAT" |
if [ $? -eq 1 ]; then |
echo_yellow "(i) Note: The category does not exist and will be created if you continue:" |
echo_yellow " $CURCAT" |
fi |
elif [ $COMMANDMODE -eq 0 ]; then |
# Command mode: "-<cmd> [<arg>]" |
cmd="${cmd:1}" |
|
# Kommando verarbeiten |
if [[ "$cmd" == "listcat" || "$cmd" == "ls" || "$cmd" == "lc" ]]; then |
# List categories |
"$DIR"/listcat "$arg" | less |
elif [[ "$cmd" == "strike" || "$cmd" == "str" ]]; then |
# Strike entry |
if [[ "$arg" == "last" ]]; then |
arg=$LAST_ID |
fi |
"$DIR"/str "$arg" |
elif [[ "$cmd" == "unstrike" || "$cmd" == "unstr" ]]; then |
# Un-Strike entry |
if [[ "$arg" == "last" ]]; then |
arg=$LAST_ID |
fi |
"$DIR"/unstr "$arg" |
elif [[ "$cmd" == "singleadd" || "$cmd" == "sa" || "$cmd" == "as" || "$cmd" == "appendsingle" || "$cmd" == "aps" ]]; then |
array=(${arg// / }) |
CAT="${array[0]}" |
TXT="${array[@]:1}" |
|
# Warning if category does not exist yet. |
"$DIR"/exists1 "$CAT" |
if [ $? -eq 1 ]; then |
echo_yellow "(i) Note: Category '$CAT' will be created." |
fi |
|
OUT=$( "$DIR"/aps "$CAT" "$TXT" ) |
EC=$? |
echo -n "$OUT" |
if [ $EC -ne 0 ]; then |
echo_red "[!] FATAL ERROR: Could not append the entry!" 1>&2 |
else |
LAST_ID=$( echo "$OUT" | sed -r 's/^.*OK! ([[:digit:]]+).*$/\1/g' ) |
fi |
elif [[ "$cmd" == "movefromid" || "$cmd" == "mfi" ]]; then |
# Move ID $arg to category $CURCAT |
if [[ "$arg" == "last" ]]; then |
arg=$LAST_ID |
fi |
"$DIR"/id_move "$CURCAT" "$arg" |
elif [[ "$cmd" == "movefromcat" || "$cmd" == "mfc" ]]; then |
# Move CAT $arg to category $CURCAT |
"$DIR"/cat_move "$CURCAT" "$arg" |
elif [[ "$cmd" == "listent" || "$cmd" == "le" ]]; then |
# List entries |
"$DIR"/listent "$arg" | less |
elif [[ "$cmd" == "listcurent" || "$cmd" == "lce" ]]; then |
# List current entries |
"$DIR"/listent "$CURCAT" | less |
elif [[ "$cmd" == "clear" || "$cmd" == "cls" ]]; then |
clear |
elif [[ "$cmd" == "batch" || "$cmd" == "bat" ]]; then |
TMPFIL=$( mktemp --suffix=.stam ) |
# TODO: can the .nanorc file be enforced? |
nano -Y stam -- "$TMPFIL" |
if [ -f "$TMPFIL" ]; then |
echo_cyan "Processing batch script..." |
"$0" --batchmode < "$TMPFIL" |
rm "$TMPFIL" |
echo_cyan "Batch finished!" |
else |
echo_yellow "No data entered in batch mode editor. Cancelled." |
fi |
elif [[ "$cmd" == "sub" || "$cmd" == "su" ]]; then |
# At the moment, we do not use '--subshell' |
"$0" --subshell |
elif [[ "$cmd" == "back" || "$cmd" == "b" ]]; then |
X_PREV_CAT="$CURCAT" |
|
# change category |
CURCAT="$PREV_CAT" |
|
# if [ $IS_BATCHMODE -eq 0 ]; then |
# echo_green "Your category is now '$CURCAT'" |
# fi |
|
# Warning if category does not exist yet. |
"$DIR"/exists1 "$CURCAT" |
if [ $? -eq 1 ]; then |
echo_yellow "(i) Note: The category does not exist and will be created if you continue:" |
echo_yellow " $CURCAT" |
fi |
|
# Special ability: Allow that you can go forward again |
PREV_CAT="$X_PREV_CAT" |
elif [[ "$cmd" == "showhistory" || "$cmd" == "shi" ]]; then |
# Leider enthält das nicht die Ausgaben :-( |
cat ~/.stam_history | less |
elif [[ "$cmd" == "help" || "$cmd" == "h" || "$cmd" == "?" ]]; then |
echo_cyan "#<cat>" |
echo -e "\tChange category. Parameter: Category" |
echo -e "\tUse '##' at the beginning, if you want to create an entry beginning with '#'." |
echo_cyan "-(back|b)" |
echo -e "\tSwitch to previous used category" |
echo_cyan "-(strike|str) <id>" |
echo -e "\tStrike entry <id>" |
echo -e "\t<id> can have ranges using '<min>-<max>' or be 'last' for the last inserted ID." |
echo_cyan "-(singleadd|sa|as|appendsingle|aps) <cat> <entry>" |
echo -e "\tAdd <entry> to category <cat> without changing the category." |
echo -e "\t<cat> may not contain a white space" |
echo_cyan "-(unstrike|unstr) <id>" |
echo -e "\tUn-Strike entry <id>" |
echo -e "\t<id> can have ranges using '<min>-<max>' or be 'last' for the last inserted ID." |
echo_cyan "-(movefromid|mfi) <id>" |
echo -e "\tMove ID <id> to the current selected category" |
echo -e "\t<id> can have ranges using '<min>-<max>' or be 'last' for the last inserted ID." |
echo_cyan "-(movefromcat|mfc) <cat>" |
echo -e "\tMove all entries of category <cat> to the current selected category" |
echo -e "\t<cat> can have wildcards (*)" |
echo_cyan "-(listent|le) [<cat>]" |
echo -e "\tShow all entries. Optional parameter: Category" |
echo -e "\t<cat> can have wildcards (*)" |
echo_cyan "-(listcurent|lce)" |
echo -e "\tShow all entries of the selected category." |
echo_cyan "-(listcat|ls|lc) [<cat>]" |
echo -e "\tShow all categories. Optional parameter: Category" |
echo -e "\t<cat> can have wildcards (*)" |
echo_cyan "-(clear|cls)" |
echo -e "\tClears the screen" |
echo_cyan "-(batch|bat)" |
echo -e "\tEnters batch mode (opens a subshell, without keeping your current category!)" |
echo_cyan "-(sub|su)" |
echo -e "\tEnters subshell mode" |
echo_cyan "-(showhistory|shi)" |
echo -e "\tShow history of all entered commands" |
echo_cyan "-(help|h|?)" |
echo -e "\tThis help screen" |
echo_cyan "-(exit|quit|x|q)" |
echo -e "\tExits the program" |
elif [[ "$cmd" == "exit" || "$cmd" == "quit" || "$cmd" == "x" || "$cmd" == "q" ]]; then |
# Exit the program |
break |
else |
# Unknown command |
echo_red "[!] FATAL ERROR: Unknown command '$cmd'. Use '-help' for available commands." 1>&2 |
echo_red " If you want to add an entry, Use '--' to escape the first character." 1<&2 |
fi |
else |
# (Blind) appender mode |
|
# Keine leeren Zeilen (ist das OK?) |
if [[ "$inp" == "" ]]; then |
continue |
fi |
|
# Add single entry (aps) |
OUT=$( "$DIR"/aps "$CURCAT" "$inp" ) |
EC=$? |
echo -n "$OUT" |
if [ $EC -ne 0 ]; then |
echo_red "[!] FATAL ERROR: Could not append the entry!" 1>&2 |
else |
LAST_ID=$( echo "$OUT" | sed -r 's/^.*OK! ([[:digit:]]+).*$/\1/g' ) |
fi |
fi |
done |
|
if [ $IS_BATCHMODE -eq 0 ]; then |
echo "" |
echo "Goodbye." |
fi |
|
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |