Como formatar aspas em uma consulta PostgreSQL a partir de um script bash
Estou tentando consultar um pod Postgres do Kubernetes usando um script bash onde quero permitir que o usuário insira uma variável e, em seguida, use essa variável para consultar. Meu script bash é o seguinte:
#!/bin/bash
echo "give a last name"
read t
kubectl exec -it postgres-pod -- bash -c "psql -U postgres -c 'Select * from users WHERE last_name=\"$t\"'"
Eu tentei todas as combinações de aspas simples e duplas, mas não consigo passar um nome de usuário do tipo string. Qualquer sugestão seria apreciada
Respostas
A solução simples, mas ruim, é
bash -c "psql -U postgres -c \"Select * from users WHERE last_name='$t'\""
Isso acerta aspas, mas é vulnerável à injeção de SQL. E se a variável tcontiver um valor com aspas simples?
Lidar com isso não é tão simples; a única maneira que eu poderia pensar é usando psqlvariáveis como esta:
echo "Select * from users WHERE last_name = :'var'" | bash -c "psql -U postgres -v var=\"$t\""
Não sei por que você precisa do bash, isso deve funcionar?
kubectl exec -it postgres-pod -- psql -U postgres -c "SELECT * FROM users WHERE last_name='$t';"
Eu resolvi usando a resposta de @James Brown acima:
bash -c "psql -U postgres -c \"Select * from users WHERE last_name='$t';\""