#!/bin/bash ## ## Arching Kaos CLI tool is the main executable script to use for exploring, ## creating and distributing local blockchain(s) called zchain(s). ## ## It is accompanied with several utilities that help to create new blocks, ## reference them, export blocks to HTML pages, "roll-back" your zchain to an ## older block, reset your zchain and more. ## ## Run with no arguments to see available commands ## ## -h, --help Prints this help message ## ## -m, --module [module] Run a specified module. If no module provided ## the list of available modules will be printed. ## ## [command] [args] Run a command. If none provided a list of ## commands will be printed. ## fullprogrampath="$(realpath $0)" PROGRAM="$(basename $0)" descriptionString="Arching Kaos CLI" source $HOME/.arching-kaos/rc source $AK_LIBDIR/_ak_log source $AK_LIBDIR/_ak_script if [ $# -eq 0 ] then _ak_log_warning "No command given" ( find $AK_BINDIR | grep 'ak-' | while read available do #subcmd="$(basename $available | cut -d '-' -f 2)" subcmd="$(basename $available)" args="-h" if [ -n "$subcmd" ] then echo $subcmd | cut -d '-' -f 2 | sort | uniq | sed -e 's/^/ak /g' #$(echo $subcmd) $args fi done ) | sort | uniq exit 1 fi if [ $# -eq 1 ] then case "$1" in -h|--help) _ak_usage exit 1 ;; esac fi if [ ! -n "$(echo -n $1 | sed 's/[0-9]//g')" ] && [ "$(( $(echo -n $1 | xxd -p) - 2100))" == "1337" ] then AK_DEBUG="no" echo -n efb8bbe294b3e383863de4b880 | xxd -r -p fi subcmd="$(echo $* | sed -e 's/ /-/g')" case "$1" in -f|--function) shift if [ ! -z $1 ] && [ -n "$1" ] then grep -rnF "$1(){" $AK_BINDIR/* $AK_LIBDIR/* $AK_MODULESDIR/* if [ $? -ne 0 ] then _ak_log_error "No function $1 found" exit 1 fi if [ $(grep -rnF "$1(){" $AK_LIBDIR/* $AK_MODULESDIR/* | wc -l) -gt 1 ] then _ak_log_error "More than one functions found with name $1" exit 1 fi filename="$(grep -rnF "$1(){" $AK_LIBDIR/* $AK_MODULESDIR/* | cut -d ':' -f 1)" line="$(grep -rnF "$1(){" $AK_LIBDIR/* $AK_MODULESDIR/* | cut -d ':' -f 2)" functionname="$(grep -rnF "$1(){" $AK_LIBDIR/* $AK_MODULESDIR/* | cut -d ':' -f 3)" printf 'Use with:\n' >&2 printf 'source %s\n%s\n' "$filename" "$(echo -n $functionname | sed 's/(){//')" exit else grep -rnF "(){" $AK_LIBDIR/* $AK_MODULESDIR/* | \ sed -e "s#$AK_WORKDIR/##g" | sed -e 's/(){//g' | cut -d ':' -f 1,3 | tr ':' $'\t' exit fi ;; # Add functionality for separate modules directory -m|--module) shift subcmd="$AK_MODULESDIR/$(echo $1 | sed -e 's/ /-/g')" if [ ! -n "$1" ] then _ak_log_error "No module selected" ls -1 $AK_MODULESDIR exit 1 fi shift subargs="$*" if [ ! -n $subargs ] then subargs="--help" fi if [ ! -f $subcmd/main.sh ] then _ak_log_error "No $(basename $subcmd) module" exit 1 fi $subcmd/main.sh $subargs _ak_exit_program $? "$subcmd module finished"; ;; esac if [ -f "$AK_BINDIR/ak-$subcmd" ] then $(echo ak-$subcmd) _ak_exit_program $? "ak-$subcmd command finished"; else argc=$# argv="$*" counter=1 while [ $counter -lt $argc ] do subcmd="$(echo $argv | cut -d ' ' -f -$counter | sed -e 's/ /\-/g')" args="$(echo "$argv"| cut -d ' ' -f $(($counter + 1))-)" if [ -n "$subcmd" ] && [ -f "$AK_BINDIR/ak-$subcmd" ] then _ak_log_info "Running: ak-$subcmd with args: $args" $(echo ak-$subcmd) $args _ak_exit_program $? "ak-$subcmd command finished"; fi counter=$(($counter + 1)) done find $AK_BINDIR | while read available do echo $(basename $available) |\ grep ak-$(echo $argv | cut -d ' ' -f 1) |\ sed -e 's/-/ /g' done _ak_log_error "Unknown subcommand: $*" exit 1 fi