Estoy intentando ejecutar una secuencia de comandos simple de launchd que copia un archivo de un directorio a otro cuando el archivo cambia, pero quiero pegarlo con una marca de tiempo única para poder versionar los archivos. Mi script de launchd tiene el siguiente aspecto:
<?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>change.file.copy</string>
<key>ProgramArguments</key>
<array>
<string>cp</string>
<string>/path/to/folder/sample_file.txt</string>
<string>/path/to/another_folder/$(gdate +%Y%m%d_%T.%N)_sample_file.txt</string>
</array>
<key>WatchPaths</key>
<array>
<string>/path/to/folder/sample_file.txt</string>
</array>
</dict>
</plist>
El comando funciona perfectamente bien si lo ejecuto a través de la Terminal, es decir, si ejecuto:
cp /path/to/folder/sample_file.txt /path/to/another_folder/$(gdate +%Y%m%d_%T.%N)_sample_file.txt
Sin embargo, cada vez que el evento lo activa, en su lugar crea un archivo con una cadena (gdate +% Y% m% d_% T.% N) en lugar de la fecha real, es decir, el operador de la fecha no se resuelve cuando se ejecuta a través de launchd.
Siempre podría crear un ejecutable y ejecutarlo a través de launchd pero me preguntaba por qué lo anterior no funciona correctamente.
¡Gracias por la ayuda!
fuente