1

Я пытаюсь запустить простой скрипт launchd, который копирует файл из одного каталога в другой, когда файл изменяется, но я хочу вставить его с уникальной временной меткой, чтобы я мог создавать версии файлов. Мой скрипт launchd выглядит следующим образом:

<?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>

Команда отлично работает, если я запускаю ее через Терминал, т.е. если я запускаю:

cp /path/to/folder/sample_file.txt /path/to/another_folder/$(gdate +%Y%m%d_%T.%N)_sample_file.txt

Однако всякий раз, когда событие вызывает его, вместо этого создается файл со строкой (gdate +% Y% m% d_% T.% N) вместо фактической даты, т.е. оператор даты не разрешается при запуске через launchd.

Я всегда мог создать исполняемый файл и запустить его через launchd, но мне было интересно, почему вышеупомянутое не работает правильно.

Спасибо за помощь!

1 ответ1

1

Вот решение. Поиск по правильным ключевым словам в Google это все.

<key>ProgramArguments</key>
<array>
    <string>bash</string>
    <string>-c</string>
    <string>cp /path/to/folder/sample.txt /path_to_another_folder/$(/usr/local/bin/gdate +%Y%m%d_%T.%N)_sample.txt</string>
</array>

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .