5

У меня есть однострочная команда, которая делает запрос curl, чтобы проверить состояние сервера и затем вывести результат в файл журнала. Но проблема в том, что возвращаемый результат не имеет разрыва строки, и поэтому файл журнала портится, когда команда записывает файл журнала в следующий раз.

curl -s "http://myserver.com/api?param=1&param=2" | sudo tee -a /var/log/myserver.log

Мне нравится держать это к однострочной команде. Любое предложение приветствуется. Спасибо за ваше время.

5 ответов5

7

Используйте echo , он автоматически добавит новую строку:

echo "`curl -s "http://myserver.com/api?param=1&param=2"`" | sudo tee -a /var/log/myserver.log

В качестве альтернативы, вы можете попробовать опцию -w , но я обнаружил, что она каким-то образом печатает забавные символы в консоли (но не в файл, к счастью):

curl -s "http://myserver.com/api?param=1&param=2" -w "\n" | sudo tee -a /var/log/myserver.log
3

Самый простой - это просто добавить новую строку с помощью echo

curl -s " http://myserver.com/api?param=1&param=2 " | sudo tee -a /var/log/myserver.log && echo "" >> /var/log/myserver.log

1

Я использую awk 1 для этого (где 1 - это то, что оценивается как true):

$ printf a|awk 1
a
$ printf a\\n|awk 1
a
$ 

Он должен работать с gawk, BWK awk / nawk (поставляется с OS X) и mawk (поставляется с Debian). sed -n p работает с OS X sed, но не с GNU sed.

Альтернатива только для Bash:

printf %s\\n "$(cat)"

Обратите внимание, что $() удаляет все переводы строки с конца, поэтому, например, echo $'a\n\n'|printf %s\\n "$(cat)" печатает только один перевод строки.

Вы также можете заменить printf %s\\n на echo , но, например, x=-nene;echo "$x" ничего не печатает в Bash (если не xpg_echo и POSIX).

0

Добавить ключ -w "\n" или поставить

-w "\n"

в ваш ~/.curlrc

0

Другой синтаксис с использованием echo:

commands... | { cat; echo; } | ...

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