Включить текущую дату в качестве аргумента программы в LaunchAgents
Предположим, я хочу что-то сделать с файлом, который содержит текущую дату. По приглашению bash я мог бы просто сделать это:
$ touch /Foo/$(date +%Y-%m-%d)
Как я могу сделать это в списке запуска LaunchAgents, где у меня нет $()
имеется в наличии?
<key>ProgramArguments</key>
<array>
<string>touch</string>
<string>/Foo/CURRENT-DATE-HERE</string>
</array>
1 ответ
Решение
Одна из возможностей - запустить оболочку, чтобы выполнить расширение, а затем запустить настоящую команду:
<key>ProgramArguments</key>
<array>
<string>bash</string>
<string>-c</string>
<string>touch /Foo/$(date +%Y-%m-%d)</string>
</array>
Обратите внимание, что вся команда передается bash
в качестве одного аргумента, а затем он разделяется на команду против аргумента (ов) из-за встроенного пространства. Если это длительная команда, вы можете использовать exec touch /Foo/$(date +%Y-%m-%d)
так что оболочка заменит себя командой вместо того, чтобы запускать команду как подпроцесс, а затем зависать в ожидании ее выхода.