763e06c127
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
62 lines
1.8 KiB
Bash
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"
|