Puedo decirle al plist del agente launchd que se borre a sí mismo añadiendo su ruta completa y editándola cada vez para cada herramienta, pero ¿hay alguna forma mejor?
No tengo conocimiento de launchd
.plist que le permitirá "borrarse a sí mismo".
Cuando tu Mac arranca y cuando cargas un .plist, launchd
escaneos (según proceda): /Library/LaunchAgents
, ~/Library/LaunchAgents
, /Library/LaunchDaemons
, /System/Library/LaunchAgents
y /System/Library/LaunchDaemons
. Si el .plist no está, no se carga.
Por lo tanto, si "comprueba si la herramienta existe y se elimina" tendrá que incorporar esa lógica como parte del script que es lanzado por launchd.
¿Existe (por ejemplo) una variable que pueda coger donde el launchd devuelva su propio nombre o ruta?
launchd
no devuelve "su propio nombre o ruta"; carga/descarga/lanza/detine un trabajo definido por un .plist en una ruta. Por lo tanto, si quieres que esa variable esté disponible, tendrás que establecerla como parte del entorno definido en el .plist.
Dicho esto, no creo que sea posible que ambos puedan tener un trabajo funcionando y descargarlo simultáneamente especialmente por sí mismo; más aún si requiere privilegios elevados para hacerlo. Esta es probablemente la razón por la que instalar/desinstalar requiere la intervención del usuario.
Además, según la para launchd.plist
se dirige a los agentes/demonios que acceden a archivos/carpetas "protegidos":
PRECAUCIONES
Los daemons y agentes gestionados por launchd están sujetos a las protecciones de privacidad del usuario de MacOS. Es posible que la especificación de archivos y carpetas sensibles a la privacidad en un plist de launchd no tenga el efecto deseado y evite que el trabajo se ejecute.
Haciendo que un agente llame a un script que en efecto se borra a sí mismo (de uno de los directorios listados arriba) puede tener consecuencias no deseadas y puede que ni siquiera se ejecute.