#!/bin/bash BLUE='\033[34m' GREEN='\033[32m' BOLD='\033[1m' NORMAL='\033[0m' MARKNAME="@COMPILECMD" MARK="${MARKNAME} " MARKSTR="${BLUE}${MARKNAME}${NORMAL}" enable -n echo usage() { IFSTR="${GREEN}${NORMAL}" echo -e "${BOLD}Usage: $0 ${NORMAL}" >&2 echo -e "\t$0 runs the value of ${MARKSTR}." >&2 echo -e "\tThe point of this script is ease to compialation of single source file (toy) programs." >&2 echo -e "\tThe value of ${MARKSTR} is read from ${IFSTR} in is whatever comes after '${MARK}' until the end of the line." >&2 echo -e "\tInside the value of ${MARKSTR} all mentions of special placeholders are replaced:" >&2 echo -e "\t\t${BLUE}\$@${NORMAL} - ${IFSTR}" echo -e "\t\t${BLUE}\$*${NORMAL} - ${IFSTR} with the last extension cut off" echo -e "\t\t${BLUE}\$+${NORMAL} - All remaining arguments" } if [[ $# -lt 1 ]]; then usage exit 1 fi if [[ $1 == "-h" ]] || [[ $1 == "--help" ]]; then usage exit 0 fi input_file=$1 shift 1 if [[ ! -f $input_file ]]; then echo -e "Input file '$input_file' does not exist." >&2 exit 1 fi line=$(grep "$MARK" "$input_file" | head -1) line=${line//\$@/$input_file} line=${line//\$\*/${input_file%.*}} line=${line//\$+/$@} if [[ -n $line ]]; then command="${line#*${MARK}}" echo "Exec: $command" echo "Output:" eval "$command" else echo -e "${MARKSTR} is not defined." >&2 fi