19 votos

Ejecutar bash script en el inicio de sesión almacenado en la carpeta de inicio?

Cuando intento cargar un plist de LaunchAgent desde launchctl No encuentro cómo ejecutar un script en el directorio de inicio.

Mi código es:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>ProgramArguments</key>
    <array>
        <string>bash</string>
        <string>~/script.sh</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>Label</key>
    <string>com.tyilo.test</string>
</dict>
</plist>

He probado con y sin bash y también sustituyendo ~ con $HOME . También he probado a utilizar bash -c sin que funcione.

El código de error es:

`com.tyilo.test: bash: ~/script.sh: No such file or directory`

18voto

Wiktor Nizio Puntos 19

EnableGlobbing no funciona en OS X Yosemite 10.10 . Se ha dejado de utilizar ( ref ).

Puede ver en los registros The EnableGlobbing key is no longer respected. Please remove it. (de /var/log/system.log )

El problema es que launchd cwd (directorio de trabajo actual) es / , por lo que no se puede utilizar ./ como dijeron algunos.

Para ejecutar un script desde su casa la forma más sencilla es utilizar (bash|zsh|sh) -c . opción. De este modo, podrá utilizar la tilde ~ o el $HOME variable.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>Label</key>
    <string>org.your.stuff</string>
    <key>ProgramArguments</key>
    <array>
      <!-- here is the important thing -->
      <string>zsh</string>
      <string>-c</string>
      <string>~/you/script/in/your/home</string>
    </array>

    <!-- code below is just for the example -->
    <!-- Keep running... -->
    <key>KeepAlive</key>
    <true />
    <!-- ...every day. In sec, 60*60*24 = every day -->
    <key>ThrottleInterval</key>
    <integer>86400</integer>
  </dict>
</plist>

14voto

Fuzzy Purple Monkey Puntos 702

EnableGlobbing permite la expansión de tildes y comodines para ProgramArguments :

<key>EnableGlobbing</key>
<true/>
<key>ProgramArguments</key>
<array>
    <string>say</string>
    <string>~/*</string>
</array>

No afecta a Program o WatchPaths sin embargo, la expansión de la tilde funciona en WatchPaths por defecto.

9voto

Lamnk Puntos 123

Lo más fiable que encontré para hacer esto fue utilizar sh y el HOME variable de entorno:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>ProgramArguments</key>
    <array>
        <string>sh</string>
        <string>-c</string>
        <string>"$HOME/script.sh"</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>Label</key>
    <string>com.tyilo.test</string>
</dict>
</plist>

Nota: las comillas son necesarias.

2voto

zippy Puntos 1215

Sería útil saber por qué el script tiene que ejecutarse desde el directorio root del usuario. Si necesitas el nombre corto del usuario para el script puedes obtenerlo asignándolo a una variable como en

user=`whoami`

A continuación, utilice $user en el script.

Yo sí que pondría el script en algún sitio que no sea un directorio de inicio, luego es accesible por otros usuarios del mismo ordenador. Podrías usar el directorio compartido o poner el script en /Library//

Tendrá que utilizar la ruta completa para el plist de launchd. Además, en su plist launchd no necesitará especificar <string>bash</string> ya que debería tener el shebang en el script y debería ser ejecutable.

1voto

moodforaday Puntos 2633

¿Es ejecutable?

chmod 700 ~/script.sh

en la Terminal. Además, yo no utilizaría $HOME o ~ sino la ruta real del archivo.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.tyilo.test</string>
    <key>ProgramArguments</key>
    <array>
        <string>/path/to/script.sh</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X