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 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 ```sh
ln -s "${PWD}/orcli" ~/.local/bin/ ln -s "${PWD}/orcli" ~/.local/bin/
@ -42,8 +42,6 @@ ln -s "${PWD}/orcli" ~/.local/bin/
## Usage ## 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. Use integrated help screens for available options and examples for each command.
```sh ```sh

37
orcli
View File

@ -863,22 +863,23 @@ orcli_run_command() {
OPENREFINE_URL="http://localhost:${args[--port]}" OPENREFINE_URL="http://localhost:${args[--port]}"
# locate orcli and OpenRefine # locate orcli and OpenRefine
scriptpath=$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")
if ! command -v orcli &>/dev/null; then if ! command -v orcli &>/dev/null; then
if [[ -x "$0" ]]; then if [[ -x "${scriptpath}/orcli" ]]; then
orcli="$0" orcli="${scriptpath}/orcli"
else else
error "orcli is not executable!" "Try: chmod + $0" error "orcli is not executable!" "Try: chmod + ${scriptpath}/orcli"
fi fi
fi fi
if [[ -x "refine" ]]; then if [[ -x "${scriptpath}/refine" ]]; then
openrefine="./refine" openrefine="${scriptpath}/refine"
else else
error "OpenRefine's startup script (refine) not found!" "Did you put orcli in your OpenRefine app dir?" error "OpenRefine's startup script (refine) not found!" "Did you put orcli in your OpenRefine app dir?"
fi fi
# create tmp directory # create tmp directory
tmpdir="$(mktemp -d)" OPENREFINE_TMPDIR="$(mktemp -d)"
trap '{ rm -rf "$tmpdir"; }' 0 2 3 15 trap '{ rm -rf "$OPENREFINE_TMPDIR"; }' 0 2 3 15
# check if OpenRefine is already running # check if OpenRefine is already running
if curl -fs "${OPENREFINE_URL}" &>/dev/null; then if curl -fs "${OPENREFINE_URL}" &>/dev/null; then
@ -886,26 +887,29 @@ orcli_run_command() {
fi fi
# start OpenRefine with tmp workspace and autosave period 25 hours # 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" & 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="$!" OPENREFINE_PID="$!"
# update trap to kill OpenRefine on error or exit # 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) # 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 if ! curl -fs --retry 20 --retry-connrefused --retry-delay 1 "${OPENREFINE_URL}/command/core/get-version" &>/dev/null; then
error "starting OpenRefine server failed!" error "starting OpenRefine server failed!"
else 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 fi
# execute script(s) in subshell # 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 [[ ${args[file]} == '-' || ${args[file]} == '"-"' ]]; then
if ! read -u 0 -t 0; then if ! read -u 0 -t 0; then
# case 1: interactive mode if stdin is selected but not present # case 1: interactive mode if stdin is selected but not present
bash --rcfile <( bash --rcfile <(
cat ~/.bashrc cat ~/.bashrc
if [[ $orcli ]]; then
echo "alias orcli=$orcli"
fi
interactive interactive
) -i </dev/tty ) -i </dev/tty
exit exit
@ -915,6 +919,9 @@ orcli_run_command() {
# case 2: execute scripts and keep shell running # case 2: execute scripts and keep shell running
bash --rcfile <( bash --rcfile <(
cat ~/.bashrc cat ~/.bashrc
if [[ $orcli ]]; then
echo "alias orcli=$orcli"
fi
for i in "${!files[@]}"; do for i in "${!files[@]}"; do
log "execute script ${files[$i]}" log "execute script ${files[$i]}"
awk 1 "${files[$i]}" awk 1 "${files[$i]}"
@ -923,9 +930,13 @@ orcli_run_command() {
) -i </dev/tty ) -i </dev/tty
else else
# case 3: just execute scripts # case 3: just execute scripts
export orcli
for i in "${!files[@]}"; do for i in "${!files[@]}"; do
log "execute script ${files[$i]}" 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 done
fi fi

View File

@ -18,22 +18,23 @@ fi
OPENREFINE_URL="http://localhost:${args[--port]}" OPENREFINE_URL="http://localhost:${args[--port]}"
# locate orcli and OpenRefine # locate orcli and OpenRefine
scriptpath=$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")
if ! command -v orcli &>/dev/null; then if ! command -v orcli &>/dev/null; then
if [[ -x "$0" ]]; then if [[ -x "${scriptpath}/orcli" ]]; then
orcli="$0" orcli="${scriptpath}/orcli"
else else
error "orcli is not executable!" "Try: chmod + $0" error "orcli is not executable!" "Try: chmod + ${scriptpath}/orcli"
fi fi
fi fi
if [[ -x "refine" ]]; then if [[ -x "${scriptpath}/refine" ]]; then
openrefine="./refine" openrefine="${scriptpath}/refine"
else else
error "OpenRefine's startup script (refine) not found!" "Did you put orcli in your OpenRefine app dir?" error "OpenRefine's startup script (refine) not found!" "Did you put orcli in your OpenRefine app dir?"
fi fi
# create tmp directory # create tmp directory
tmpdir="$(mktemp -d)" OPENREFINE_TMPDIR="$(mktemp -d)"
trap '{ rm -rf "$tmpdir"; }' 0 2 3 15 trap '{ rm -rf "$OPENREFINE_TMPDIR"; }' 0 2 3 15
# check if OpenRefine is already running # check if OpenRefine is already running
if curl -fs "${OPENREFINE_URL}" &>/dev/null; then if curl -fs "${OPENREFINE_URL}" &>/dev/null; then
@ -41,26 +42,29 @@ if curl -fs "${OPENREFINE_URL}" &>/dev/null; then
fi fi
# start OpenRefine with tmp workspace and autosave period 25 hours # 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" & 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="$!" OPENREFINE_PID="$!"
# update trap to kill OpenRefine on error or exit # 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) # 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 if ! curl -fs --retry 20 --retry-connrefused --retry-delay 1 "${OPENREFINE_URL}/command/core/get-version" &>/dev/null; then
error "starting OpenRefine server failed!" error "starting OpenRefine server failed!"
else 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 fi
# execute script(s) in subshell # 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 [[ ${args[file]} == '-' || ${args[file]} == '"-"' ]]; then
if ! read -u 0 -t 0; then if ! read -u 0 -t 0; then
# case 1: interactive mode if stdin is selected but not present # case 1: interactive mode if stdin is selected but not present
bash --rcfile <( bash --rcfile <(
cat ~/.bashrc cat ~/.bashrc
if [[ $orcli ]]; then
echo "alias orcli=$orcli"
fi
interactive interactive
) -i </dev/tty ) -i </dev/tty
exit exit
@ -70,6 +74,9 @@ if [[ ${args[--interactive]} ]]; then
# case 2: execute scripts and keep shell running # case 2: execute scripts and keep shell running
bash --rcfile <( bash --rcfile <(
cat ~/.bashrc cat ~/.bashrc
if [[ $orcli ]]; then
echo "alias orcli=$orcli"
fi
for i in "${!files[@]}"; do for i in "${!files[@]}"; do
log "execute script ${files[$i]}" log "execute script ${files[$i]}"
awk 1 "${files[$i]}" awk 1 "${files[$i]}"