Использование printf '%q'
для генерации .profile
контента выглядит примерно так:
{
printf '%q ' \
curl -X POST -H "Content-Type: application/json" \
-d '{"value1":"PHONENUMBER","value2":"MESSAGE"}' \
https://maker.ifttt.com/trigger/TRIGGER/with/key/KEY
printf '%s\n' "&>/dev/null"
} >> .profile
Обратите внимание, что вы не можете использовать строку формата %q
, если хотите &>/dev/null
для синтаксического анализа, поскольку по самой своей природе он форматирует все передаваемые данные для анализа в качестве данных.
Таким образом, мы используем printf '%q ' "command name" "first argument" ...
для самой команды и форматируем перенаправление внеband.
Тем не менее, обратите внимание, что значение выше, только если вы подставляете переменные из ненадежного источника (вместо того, чтобы жестко их кодировать, как в примере), ибеспокоятся о том, что недопустимые значения могут быть использованы для внедрения команд.Если вы действительно просто добавляете постоянную строку в конец файла, заключенный в кавычки heredoc позволит вам создать более естественный вид цитирования оболочки вручную (на самом деле, как вы уже сделали!) И передать его дословно:
cat >>.profile <<'EOF'
curl -X POST -H "Content-Type: application/json" \
-d '{"value1":"PHONENUMBER","value2":"MESSAGE"}' \
https://maker.ifttt.com/trigger/TRIGGER/with/key/KEY &> /dev/null
EOF
Здесь все между <<'EOF'
и EOF
передается точно так же, как задано, , включая кавычки и расширения параметров, которые в противном случае оболочка может попытаться интерпретировать.