Я знаю, как использовать curl для вставки новых событий в календарь CalDAV, если событие было сохранено как локальный файл ics по предыдущей команде:
$command > $localfile
curl -T "$localfile" $url
Это отлично работает, но я бы хотел бы сделать это без необходимости в локальном файле, я хочу передать результат из $ command в curl, что-то вроде этого:
$command | curl -T - $url
В соответствии с руководством curl, опция "T -" должна быть что требуется: он должен читать из стандартного ввода вместо файла. Но если я использую эту опцию, я получаю следующий ответ:
<?xml version="1.0" encoding="utf-8"?>
<d:error xmlns:d="DAV:" xmlns:s="http://sabredav.org/ns">
<s:exception>Sabre\DAV\Exception\Conflict</s:exception>
<s:message>PUT is not allowed on non-files.</s:message>
</d:error>
Я пробовал другие параметры, такие как "--data" и "--data-raw", но я не нашел правильная комбинация еще. Может ли кто-нибудь помочь мне с этим, пожалуйста?
На самом деле, полный цикл команд, который я пытаюсь реализовать, выглядит следующим образом:
cat<<EOC | curl -T - $url
BEGIN:VCALENDAR
VERSION:2.0
BEGIN:VEVENT
CREATED:${CREATED}
UID:${RNDUID}
CLASS:PUBLIC
CATEGORIES:TV
SUMMARY:${SUMMARY}
LOCATION:${LOCATION}
DTSTART:${DTSTART}
DTEND:${DTEND}
DESCRIPTION:${DESCRIPTION}
END:VEVENT
END:VCALENDAR
EOC
Я пробовал «эхо» вместо «кошка», но это не меняет результат.