Files
scripts/run
T
2023-08-03 10:52:40 -06:00

164 lines
4.0 KiB
Bash
Executable File

#!/bin/zsh
# Supported languages.
TYPES=("c", "rs", "cs", "java", "js", "python", "flutter", "gradle", "go")
# Catch case where there are too many arguments.
if [[ $# -gt 1 ]]; then
echo "Proper usage: run {file}"
echo " eg. run"
echo " eg. run main"
echo " eg. run gradle"
echo " eg. run flutter"
echo " eg. run -h"
echo " eg. run --help"
exit
# Help page
elif [[ $1 == "-h" || $1 == "--help" ]]; then
echo "\nAbstracting away command line tools to compile and run code for various languages and frameworks."
echo "User can use with or without an argument file, the filetype is not needed."
echo "With no arguments, 'run' will list available (and supported) files."
echo "Additionally, 'run' prompts for and passes command line arguments for a program.\n"
echo "Detects required tools to use based upon filetypes.\n"
echo "Usage:"
echo " run"
echo " run [filename]"
echo " eg. run main"
echo " run gradle"
echo " run flutter"
echo " run -h"
echo " run --help\n"
echo "Supported languages: $TYPES"
exit
# Default state, with a reminder of what files may be launched from based upon the currently supported languages.
elif [[ $# -eq 0 ]]; then
echo "Files that may be launched from:"
# List files available to launch from.
for f in *
do
TYPE=`echo $f | cut -d "." -f 2`
counter=0
# Only list supported filetypes.
if [[ ${TYPES[@]} =~ $TYPE ]]; then
counter=$((counter+1)) # Increment counter to indicate the number of results.
# Format: filename (file type)
echo `echo $f | cut -d "." -f 1` "("$TYPE")"
fi
done
echo $counter" available files.\n"
# Catch case where there are no available files to run and exit.
if [[ $counter -eq 0 ]]; then
echo "No available files to run. Exiting."
exit
fi
read "?Which file would you like to launch from: " TMP
# Locate file and assign variables associated with the file (name and filetype).
for f in *
do
FILE=`echo $f | cut -d "." -f 1`
if [[ $FILE == $TMP ]]; then
NAME=$TMP
TYPE=`echo $f | cut -d "." -f 2`
fi
done
# User has provided the file name.
elif [[ $# -eq 1 ]]; then
# Locate file and assign variables associated with the file (name and filetype).
for f in *
do
FILE=`echo $f | cut -d "." -f 1`
if [[ $FILE == $1 ]]; then
NAME=$FILE
TYPE=`echo $f | cut -d "." -f 2`
fi
done
fi
read "?Arguments: " ARGS
# Run C app.
if [[ $TYPE == "c" ]]; then
clear
echo "Compiling..."
gcc $NAME.c -lm
echo "Output..."
./a.out $ARGS
rm a.out
# Run a Rust app.
elif [[ $TYPE == "rs" ]]; then
clear
cargo run
# Run C# app.
elif [[ $TYPE == "cs" ]]; then
clear
echo "Compiling..."
mcs -out:$NAME.exe $NAME.cs
echo "Output..."
mono $NAME.exe
# Run Java app.
elif [[ $TYPE == "java" ]]; then
clear
echo "Compiling..."
javac -cp $CP *.java
echo "Output...";
java -cp $CP $NAME $ARGS
rm *.class
# Run JavaScript app.
elif [[ $TYPE == "js" ]]; then
clear
echo "Output..."
node $NAME.js
# Run Python app.
elif [[ $TYPE == "py" ]]; then
clear
echo "Running..."
python $FILE.py
# Run Golang app.
elif [[ $TYPE == "go" ]]; then
clear
echo "Compiling..."
go build
echo "Output..."
./discordo #TODO: need to dynamically obtain the newly created object file to run and then delete
rm discordo
# Run app through Gradle
elif [[ $1 == "gradle" ]]; then
clear;
echo "Output..."
./gradlew run
# Run app through Flutter
elif [[ $1 == "flutter" ]]; then
clear;
echo "Output..."
flutter run
else
read "?Language is not supported. Create a GH issue (y/n, default y): " GH
if [[ $GH == "y" || $GH == "" ]]; then
echo "Need to implement issue reporting."
fi
fi