Publicando uma variável PHP em um script bash

0

Eu me conectei a uma API com um script bash da seguinte forma:

#!/bin/bash

curl "https://example.com/templates/search?field=template_id&    field=name" \
-H "Authorization: Bearer ----------------------------------------------------------------"

curl -X POST "https://example.com/audits" \
-d '{ "template_id": "template_28c5b7ec77f34ea7881b6a9ef9c01b91", "header_items": [ { "item_id": "f3245d40-ea77-11e1-aff1-0800200c9a66", "label": "Audit Title", "type": "textsingle", "responses": { "text": "${title}" } }, { "item_id": "f3245d43-ea77-11e1-aff1-0800200c9a66", "label": "Conducted By", "type": "textsingle", "responses": { "text": "John Citizen" } } ] }' \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ----------------------------------------------------------------"

Isso se conecta com sucesso.

Eu, então, tenho uma página do PHP com um formulário no qual você pode inserir um título para a auditoria. Quando eu pressiono o botão salvar no formulário, o script acima é executado e cria a auditoria. No entanto, o título é $ {title} e não o valor da caixa de texto.

É possível postar valores de variáveis em um script bash dessa maneira?

    
por Ross 03.05.2018 / 11:11

1 resposta

3

Atualizado com comentários e discussões de bate-papo levados em consideração.

O código PHP executa o script de shell como sh ./curl.sh $title , em que $title é uma variável do PHP (idealmente, deve-se citar corretamente o $title data para não confundir o shell). Portanto, o script de shell precisa escolher o título a partir de seus parâmetros de linha de comando, $* , em vez de usar a variável de shell $title .

O documento JSON que enviou é simples, o que significa que a expansão da variável $title não será vista pelo shell.

Você precisa sair temporariamente da única string entre aspas para obter a variável expandida:

-d '{ "template_id": "template...{ "text": "'"$*"'" }...

As aspas duplas externas em "'"$*"'" pertencem ao documento JSON, o conteúdo entre aspas simples pertence ao shell. As aspas duplas internas citam o valor $* (no caso de conter padrões de espaço em branco e / ou globalização de nomes de arquivos).

Houve um problema adicional no código PHP, o que significa que a variável $title do PHP nunca foi configurada corretamente. Quando isso foi corrigido, funcionou como esperado.

    
por 03.05.2018 / 11:21