#!/bin/sh
set -eu
usage() {
cat <<-'EOF'
Usage:
serve [-d DIRECTORY] [-n] [-p PORT]
serve -h
EOF
}
help() {
cat <<-'EOF'
Options:
-d DIRECTORY the directory to serve (default: ".")
-n do not open browser
-p PORT the port to listen on (default: find one)
-h, --help show this message
Serve DIRECTORY via HTTP as a static file server, and open the
URL on the $BROWSER.
Examples:
Serve "." on the default PORT:
$ serve
Serve "public/" on port 1234:
$ serve -d public/ -p 1234
EOF
}
for flag in "$@"; do
case "$flag" in
(--)
break
;;
(--help)
usage
help
exit
;;
(*)
;;
esac
done
DIRECTORY='.'
PORT="$(free-port)"
OPEN_BROWSER=true
while getopts 'd:np:h' flag; do
case "$flag" in
(d)
DIRECTORY="$OPTARG"
;;
(p)
PORT="$OPTARG"
;;
(n)
OPEN_BROWSER=false
;;
(h)
usage
help
exit
;;
(*)
usage >&2
exit 2
;;
esac
done
if [ "$OPEN_BROWSER" = true ]; then
open "http://localhost:$PORT" &
fi
python3 -m http.server -d "$DIRECTORY" "$PORT"
wait