#!/bin/bash # author: Leon van Kammen / Coder of Salvation 2014 # # restconsole, a simple curl REST api wrapper for bash rooturl="http://api.yourcompany.com" apikey="e270f99745341a89e883c583a25b821c" cache=() # here you can define your preset calls # the variables can be insert directly in the console ('foo=flop' e.g.) cache+=('POST /foo/bar?key=$apikey&flop=$flop') cache+=('PUT /foo/bar?key=$apikey&foo=$foo') # lets teach some history teach(){ for line in "${cache[@]}"; do history -s -- "$line" done } docurl(){ line="$1"; line="${line// \// $rooturl/}"; line="$(echo "$line" | sed 's/&/\\&/g' )" line="$(eval "echo "$line"")" [[ ! "$line" == ^GET ]] && args="${line//*\?/}" && line="${line//\?*/}" echo "=> $line" echo "=> $args" curl --data-urlencode "$args" -X ${line}; printf "\n\n"; } process(){ [[ "$1" =~ ^POST ]] || [[ "$1" =~ ^GET ]] || [[ "$1" =~ ^PUT ]] || [[ "$1" =~ "DELETE" ]] && { docurl "$line" return 0; } [[ "$1" == "exit" ]] || [[ "$1" == "quit" ]] && exit 0 eval "$line" # just allow inline bashscript teach } subconsole(){ echo -e "type 'exit' to quit\n" while IFS="" read -r -e -d $'\n' -p "$2> " line; do "$1" "$line" # history -s "$line" # lets not add performed command to history done } echo -e "\npress arrow up to cycle suggestions\n" teach; subconsole process "$rooturl"