Files
fn_registry/bash/functions/infra/open_doc_onlyoffice.sh
T
egutierrez 763e06c127 feat(browser): auto-commit con 178 cambios
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-20 18:22:23 +02:00

62 lines
1.8 KiB
Bash

#!/usr/bin/env bash
# open_doc_onlyoffice — abre un documento ofimático con OnlyOffice Desktop Editors.
#
# Uso:
# open_doc_onlyoffice <ruta_archivo> [--restart]
#
# Lanza el editor desacoplado del shell (setsid + background) para que sobreviva
# al proceso que lo invoca. Localiza el binario por PATH, sin hardcodear rutas.
#
# --restart cierra toda la instancia de OnlyOffice antes de relanzar, para forzar
# la recarga desde disco de un archivo que se regeneró (OnlyOffice mantiene en
# memoria la versión vieja de los documentos ya abiertos).
set -euo pipefail
usage() {
echo "uso: open_doc_onlyoffice <ruta_archivo> [--restart]" >&2
exit 2
}
[ $# -ge 1 ] || usage
doc=""
restart=0
for arg in "$@"; do
case "$arg" in
--restart) restart=1 ;;
-h|--help) usage ;;
*) doc="$arg" ;;
esac
done
[ -n "$doc" ] || usage
if [ ! -f "$doc" ]; then
echo "error: archivo no encontrado: $doc" >&2
exit 1
fi
bin="$(command -v onlyoffice-desktopeditors || true)"
if [ -z "$bin" ]; then
echo "error: onlyoffice-desktopeditors no esta en PATH" >&2
exit 1
fi
# Ruta absoluta para que OnlyOffice no dependa del directorio de trabajo.
doc_abs="$(readlink -f "$doc")"
if [ "$restart" -eq 1 ]; then
# Cierra la app entera para descartar la copia en memoria de los documentos.
# pkill -x sobre el comm exacto del proceso real (no -f, para no auto-matar
# el propio script si su ruta contiene el patrón).
pkill -x DesktopEditors 2>/dev/null || true
# Espera (máx ~5s) a que el proceso principal termine antes de relanzar.
for _ in $(seq 1 25); do
pgrep -x DesktopEditors >/dev/null 2>&1 || break
sleep 0.2
done
fi
setsid "$bin" "$doc_abs" >/dev/null 2>&1 &
echo "abierto en OnlyOffice: $doc_abs"