use scriptpath to locate refine

This commit is contained in:
felixlohmeier 2022-10-20 21:09:28 +00:00
parent 6ab1ab171c
commit f1c37c947e
3 changed files with 44 additions and 28 deletions

View File

@ -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

37
orcli
View File

@ -863,22 +863,23 @@ orcli_run_command() {
OPENREFINE_URL="http://localhost:${args[--port]}"
# locate orcli and OpenRefine
scriptpath=$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")
if ! command -v orcli &>/dev/null; then
if [[ -x "$0" ]]; then
orcli="$0"
if [[ -x "${scriptpath}/orcli" ]]; then
orcli="${scriptpath}/orcli"
else
error "orcli is not executable!" "Try: chmod + $0"
error "orcli is not executable!" "Try: chmod + ${scriptpath}/orcli"
fi
fi
if [[ -x "refine" ]]; then
openrefine="./refine"
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 +887,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 [[ $orcli ]]; then
echo "alias orcli=$orcli"
fi
interactive
) -i </dev/tty
exit
@ -915,6 +919,9 @@ orcli_run_command() {
# case 2: execute scripts and keep shell running
bash --rcfile <(
cat ~/.bashrc
if [[ $orcli ]]; then
echo "alias orcli=$orcli"
fi
for i in "${!files[@]}"; do
log "execute script ${files[$i]}"
awk 1 "${files[$i]}"
@ -923,9 +930,13 @@ orcli_run_command() {
) -i </dev/tty
else
# case 3: just execute scripts
export orcli
for i in "${!files[@]}"; do
log "execute script ${files[$i]}"
bash -e <(awk 1 "${files[$i]}")
bash -e <(
echo "if [[ $orcli ]]; then alias orcli=$orcli; fi"
awk 1 "${files[$i]}"
)
done
fi

View File

@ -18,22 +18,23 @@ fi
OPENREFINE_URL="http://localhost:${args[--port]}"
# locate orcli and OpenRefine
scriptpath=$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")
if ! command -v orcli &>/dev/null; then
if [[ -x "$0" ]]; then
orcli="$0"
if [[ -x "${scriptpath}/orcli" ]]; then
orcli="${scriptpath}/orcli"
else
error "orcli is not executable!" "Try: chmod + $0"
error "orcli is not executable!" "Try: chmod + ${scriptpath}/orcli"
fi
fi
if [[ -x "refine" ]]; then
openrefine="./refine"
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 +42,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 [[ $orcli ]]; then
echo "alias orcli=$orcli"
fi
interactive
) -i </dev/tty
exit
@ -70,6 +74,9 @@ if [[ ${args[--interactive]} ]]; then
# case 2: execute scripts and keep shell running
bash --rcfile <(
cat ~/.bashrc
if [[ $orcli ]]; then
echo "alias orcli=$orcli"
fi
for i in "${!files[@]}"; do
log "execute script ${files[$i]}"
awk 1 "${files[$i]}"