19 votos

Ejecutar un script de bash en el inicio de sesión se almacenan en la carpeta de inicio?

Cuando intento cargar un LaunchAgent plist de launchctl I no puede averiguar cómo ejecutar una secuencia de comandos 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 el bash y también la sustitución de ~ con $HOME. También he intentado usar bash -c sin trabajo.

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 quedado obsoleta (ref).

Se 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) /, entonces usted no puede usar ./ al igual que algunas personas, dijo.

Para ejecutar una secuencia de comandos desde tu casa de la forma más sencilla es utilizar (bash|zsh|sh) -c. opción. De esta manera usted tendrá la capacidad de uso de la tilde ~ o de la $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 tilde y la expansión de 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 tilde obras de ampliación en WatchPaths por defecto.

9voto

Lamnk Puntos 123

La más fiable que he encontrado de hacerlo era mediante el uso de sh y 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é la secuencia de comandos debe ejecutarse desde el directorio home del usuario. Si usted necesita el usuario shortname para la secuencia de comandos se puede obtener mediante la asignación a una variable como en

user=`whoami`

A continuación, utilice $user en la secuencia de comandos.

Realmente me pone en un lugar distinto de un directorio de inicio, a continuación, es accesible por otros usuarios en el mismo equipo. Usted puede utilizar el directorio Compartido o poner el script en /Library/Scripts/

Usted tendrá que utilizar la ruta de acceso completa para el launchd plist. También, en su launchd plist usted no necesita especificar <string>bash</string> como usted debe tener el proceso en el guión y que debe de ser ejecutable.

1voto

moodforaday Puntos 2633

Es ejecutable?

chmod 700 ~/script.sh

en la Terminal. Además, yo no los uso $HOME o ~ sino la ruta de acceso al 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