Включить текущую дату в качестве аргумента программы в 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) так что оболочка заменит себя командой вместо того, чтобы запускать команду как подпроцесс, а затем зависать в ожидании ее выхода.

Другие вопросы по тегам