#!/bin/sh # deckLister.sh: Interactively reads card names in any language, searches for # them and writes them in English line by line. # # Usage: deckLister.sh [-f FILE] scriptName="${0##*/}" usageMessage="Usage: ${scriptName} [-f FILE]" error() { printf '%s error: %s\n' "$scriptName" "$*" >&2 } errorAndUsage() { printf '%s error: %s\n%s\n' "$scriptName" "$*" "$usageMessage" >&2 } file='' welcomeMessage="${scriptName}: Input non-ambiguous card names in any language." prompt='> ' # Process options while getopts ':f:' opt; do case $opt in 'f' ) file="$OPTARG" ;; '?' ) printf '%s\n' "$usageMessage" >&2 exit 1 esac done shift $((OPTIND - 1)) [ -n "$1" ] && errorAndUsage 'Too many arguments.' && exit 1 log() { if [ -n "$file" ]; then printf '%s\n' "$@" >> "$file" else printf '%s\n' "$@" fi } nameToEnglish() { json="$(getScryfallJSON.sh "$@")" || return 1 echo "$json" | jq -r .name } echo "$welcomeMessage" >&2 while true; do printf '%s' "$prompt" >&2 read -r cardname englishName="$(nameToEnglish "$cardname")" [ -n "$englishName" ] && log "$englishName" done