Seu código:
sqlq(){
result='sqlplus -S sss/eee@sid < $1|grep -v '^$''
echo $result
}
echo "select * from emp" > q.sql
sqlq q.sql
O echo
e a variável na função sqlq
não são necessários:
sqlq () {
sqlplus -S "sss/eee@sid" < "$1" | grep -v '^$'
}
Isso enviará a saída da função para a saída padrão (como antes).
Ao chamar a função, você pode redirecionar sua saída para um arquivo:
cat >query.sql <<END_SQL
SELECT * FROM emp;
END_SQL
sqlq query.sql >result.out
O motivo pelo qual estou usando um aqui-documento aqui é que facilita muito a criação de consultas SQL com várias linhas:
cat >query.sql <<END_SQL
SELECT data.*
FROM data
JOIN attributes ON (data.attr_id = attributes.attr_id)
WHERE attributes.name = "Example";
END_SQL
... por exemplo.