Cómo formatear comillas en una consulta de PostgreSQL desde un script bash
Estoy tratando de consultar un pod de kubernetes Postgres usando un script bash donde quiero permitir que el usuario ingrese una variable y luego use esa variable para consultar. Mi script de bash es el siguiente:
#!/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\"'"
He probado todas las combinaciones de comillas simples y dobles, pero no puedo pasar un nombre de usuario de tipo cadena. cualquier sugerencia sera apreciada
Respuestas
La solución simple, pero mala, es
bash -c "psql -U postgres -c \"Select * from users WHERE last_name='$t'\""
Esto hace que las citas sean correctas, pero es vulnerable a la inyección de SQL. ¿Qué pasa si la variable tcontiene un valor con comillas simples?
Lidiar con eso no es tan simple; la única forma en que puedo pensar es usar psqlvariables como esta:
echo "Select * from users WHERE last_name = :'var'" | bash -c "psql -U postgres -v var=\"$t\""
No estoy seguro de por qué necesita bash, ¿debería funcionar?
kubectl exec -it postgres-pod -- psql -U postgres -c "SELECT * FROM users WHERE last_name='$t';"
Lo resolví usando la respuesta de @James Brown anterior:
bash -c "psql -U postgres -c \"Select * from users WHERE last_name='$t';\""