diff --git a/README.md b/README.md index bf06c20..aaf75bc 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ wget https://github.com/opencultureconsulting/orcli/raw/main/orcli chmod +x orcli ``` -3. Create a symlink in your $PATH (e.g. to ~/.local/bin) +3. Optional: Create a symlink in your $PATH (e.g. to ~/.local/bin) ```sh ln -s "${PWD}/orcli" ~/.local/bin/ @@ -42,8 +42,6 @@ ln -s "${PWD}/orcli" ~/.local/bin/ ## Usage -Ensure you have OpenRefine running (i.e. available at http://localhost:3333 or another URL) or use the integrated start command first. - Use integrated help screens for available options and examples for each command. ```sh diff --git a/orcli b/orcli index 89b44e2..d84968c 100755 --- a/orcli +++ b/orcli @@ -590,9 +590,6 @@ function init_import() { # shellcheck shell=bash function interactive() { cat <<'EOF' -if ! command -v orcli &>/dev/null; then - alias orcli="$orcli" -fi PS1="(orcli) [\u@\h \W]\$ " source <(orcli completions) echo '================================================================' @@ -863,22 +860,16 @@ orcli_run_command() { OPENREFINE_URL="http://localhost:${args[--port]}" # locate orcli and OpenRefine - if ! command -v orcli &>/dev/null; then - if [[ -x "$0" ]]; then - orcli="$0" - else - error "orcli is not executable!" "Try: chmod + $0" - fi - fi - if [[ -x "refine" ]]; then - openrefine="./refine" + scriptpath=$(dirname "$(readlink -f "${BASH_SOURCE[0]}")") + if [[ -x "${scriptpath}/refine" ]]; then + openrefine="${scriptpath}/refine" else error "OpenRefine's startup script (refine) not found!" "Did you put orcli in your OpenRefine app dir?" fi # create tmp directory - tmpdir="$(mktemp -d)" - trap '{ rm -rf "$tmpdir"; }' 0 2 3 15 + OPENREFINE_TMPDIR="$(mktemp -d)" + trap '{ rm -rf "$OPENREFINE_TMPDIR"; }' 0 2 3 15 # check if OpenRefine is already running if curl -fs "${OPENREFINE_URL}" &>/dev/null; then @@ -886,26 +877,29 @@ orcli_run_command() { fi # start OpenRefine with tmp workspace and autosave period 25 hours - REFINE_AUTOSAVE_PERIOD=1440 $openrefine -d "$tmpdir" -m "${args[--memory]}" -p "${args[--port]}" -x refine.headless=true -v warn &>"$tmpdir/openrefine.log" & - openrefine_pid="$!" + REFINE_AUTOSAVE_PERIOD=1440 $openrefine -d "$OPENREFINE_TMPDIR" -m "${args[--memory]}" -p "${args[--port]}" -x refine.headless=true -v warn &>"$OPENREFINE_TMPDIR/openrefine.log" & + OPENREFINE_PID="$!" # update trap to kill OpenRefine on error or exit - trap '{ rm -rf "$tmpdir"; kill -9 "$openrefine_pid"; }' 0 2 3 15 + trap '{ rm -rf "$OPENREFINE_TMPDIR"; kill -9 "$OPENREFINE_PID"; }' 0 2 3 15 # wait until OpenRefine is running (timeout 20s) if ! curl -fs --retry 20 --retry-connrefused --retry-delay 1 "${OPENREFINE_URL}/command/core/get-version" &>/dev/null; then error "starting OpenRefine server failed!" else - log "started OpenRefine" "port: ${args[--port]}" "memory: ${args[--memory]}" "tmpdir: ${tmpdir}" "pid: ${openrefine_pid}" + log "started OpenRefine" "port: ${args[--port]}" "memory: ${args[--memory]}" "tmpdir: ${OPENREFINE_TMPDIR}" "pid: ${OPENREFINE_PID}" fi # execute script(s) in subshell - export orcli tmpdir OPENREFINE_URL openrefine_pid + export OPENREFINE_TMPDIR OPENREFINE_URL OPENREFINE_PID if [[ ${args[file]} == '-' || ${args[file]} == '"-"' ]]; then if ! read -u 0 -t 0; then # case 1: interactive mode if stdin is selected but not present bash --rcfile <( cat ~/.bashrc + if ! command -v orcli &>/dev/null; then + echo "alias orcli=${scriptpath}/orcli" + fi interactive ) -i /dev/null; then + echo "alias orcli=${scriptpath}/orcli" + fi for i in "${!files[@]}"; do - log "execute script ${files[$i]}" + log "executing script ${files[$i]}..." awk 1 "${files[$i]}" done interactive @@ -924,8 +921,14 @@ orcli_run_command() { else # case 3: just execute scripts for i in "${!files[@]}"; do - log "execute script ${files[$i]}" - bash -e <(awk 1 "${files[$i]}") + log "executing script ${files[$i]}..." + bash -e <( + if ! command -v orcli &>/dev/null; then + echo "shopt -s expand_aliases" + echo "alias orcli=${scriptpath}/orcli" + fi + awk 1 "${files[$i]}" + ) done fi diff --git a/src/lib/interactive.sh b/src/lib/interactive.sh index 9ae432e..be9dc19 100644 --- a/src/lib/interactive.sh +++ b/src/lib/interactive.sh @@ -1,9 +1,6 @@ # shellcheck shell=bash function interactive() { cat <<'EOF' -if ! command -v orcli &>/dev/null; then - alias orcli="$orcli" -fi PS1="(orcli) [\u@\h \W]\$ " source <(orcli completions) echo '================================================================' diff --git a/src/run_command.sh b/src/run_command.sh index 4a23114..a7908f7 100644 --- a/src/run_command.sh +++ b/src/run_command.sh @@ -18,22 +18,16 @@ fi OPENREFINE_URL="http://localhost:${args[--port]}" # locate orcli and OpenRefine -if ! command -v orcli &>/dev/null; then - if [[ -x "$0" ]]; then - orcli="$0" - else - error "orcli is not executable!" "Try: chmod + $0" - fi -fi -if [[ -x "refine" ]]; then - openrefine="./refine" +scriptpath=$(dirname "$(readlink -f "${BASH_SOURCE[0]}")") +if [[ -x "${scriptpath}/refine" ]]; then + openrefine="${scriptpath}/refine" else error "OpenRefine's startup script (refine) not found!" "Did you put orcli in your OpenRefine app dir?" fi # create tmp directory -tmpdir="$(mktemp -d)" -trap '{ rm -rf "$tmpdir"; }' 0 2 3 15 +OPENREFINE_TMPDIR="$(mktemp -d)" +trap '{ rm -rf "$OPENREFINE_TMPDIR"; }' 0 2 3 15 # check if OpenRefine is already running if curl -fs "${OPENREFINE_URL}" &>/dev/null; then @@ -41,26 +35,29 @@ if curl -fs "${OPENREFINE_URL}" &>/dev/null; then fi # start OpenRefine with tmp workspace and autosave period 25 hours -REFINE_AUTOSAVE_PERIOD=1440 $openrefine -d "$tmpdir" -m "${args[--memory]}" -p "${args[--port]}" -x refine.headless=true -v warn &>"$tmpdir/openrefine.log" & -openrefine_pid="$!" +REFINE_AUTOSAVE_PERIOD=1440 $openrefine -d "$OPENREFINE_TMPDIR" -m "${args[--memory]}" -p "${args[--port]}" -x refine.headless=true -v warn &>"$OPENREFINE_TMPDIR/openrefine.log" & +OPENREFINE_PID="$!" # update trap to kill OpenRefine on error or exit -trap '{ rm -rf "$tmpdir"; kill -9 "$openrefine_pid"; }' 0 2 3 15 +trap '{ rm -rf "$OPENREFINE_TMPDIR"; kill -9 "$OPENREFINE_PID"; }' 0 2 3 15 # wait until OpenRefine is running (timeout 20s) if ! curl -fs --retry 20 --retry-connrefused --retry-delay 1 "${OPENREFINE_URL}/command/core/get-version" &>/dev/null; then error "starting OpenRefine server failed!" else - log "started OpenRefine" "port: ${args[--port]}" "memory: ${args[--memory]}" "tmpdir: ${tmpdir}" "pid: ${openrefine_pid}" + log "started OpenRefine" "port: ${args[--port]}" "memory: ${args[--memory]}" "tmpdir: ${OPENREFINE_TMPDIR}" "pid: ${OPENREFINE_PID}" fi # execute script(s) in subshell -export orcli tmpdir OPENREFINE_URL openrefine_pid +export OPENREFINE_TMPDIR OPENREFINE_URL OPENREFINE_PID if [[ ${args[file]} == '-' || ${args[file]} == '"-"' ]]; then if ! read -u 0 -t 0; then # case 1: interactive mode if stdin is selected but not present bash --rcfile <( cat ~/.bashrc + if ! command -v orcli &>/dev/null; then + echo "alias orcli=${scriptpath}/orcli" + fi interactive ) -i /dev/null; then + echo "alias orcli=${scriptpath}/orcli" + fi for i in "${!files[@]}"; do - log "execute script ${files[$i]}" + log "executing script ${files[$i]}..." awk 1 "${files[$i]}" done interactive @@ -79,7 +79,13 @@ if [[ ${args[--interactive]} ]]; then else # case 3: just execute scripts for i in "${!files[@]}"; do - log "execute script ${files[$i]}" - bash -e <(awk 1 "${files[$i]}") + log "executing script ${files[$i]}..." + bash -e <( + if ! command -v orcli &>/dev/null; then + echo "shopt -s expand_aliases" + echo "alias orcli=${scriptpath}/orcli" + fi + awk 1 "${files[$i]}" + ) done fi