Я знаю, как использовать curl для вставки новых событий в календарь CalDAV, если событие сохранено как локальный файл ics предыдущей командой:
$command > $localfile
curl -T "$localfile" $url
Это отлично работает, но я хотел бы сделать это без необходимости в локальном файле, я хочу передать результат из команды $ в 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
Я попробовал «эхо» вместо «кошка», но это не меняет результат.
echo
эту команду? Поэтомуecho $command | curl -T - $url
- person Victor Deleau   schedule 30.01.2020-H "Content-Type: text/plain"
с правильным типом контента. - person Victor Deleau   schedule 30.01.2020