On Tue, 23 Jan 2007, Josh Williams wrote:
From: Jeff Frost <[EMAIL PROTECTED]>
On Mon, 22 Jan 2007, Richard Ray wrote:
...
That's definitely part of it. I'm assuming the above is an abridged example
and the OP is doing something dynamic with the query. The real trouble is
Bash likes to expand the asterisk into a list of every file in the current
directory when you try to push the command through a variable. So it's just
a matter of finding a way to escape the * character to keep Bash from
globbing, which unfortunately right now is escaping me (no pun intended.)
Oh...you just need to put quotes around the variable like this:
#!/bin/bash
CMD="psql -c 'select * from products;' jefftest"
echo "$CMD" >> my_log
eval "$CMD" |
while read x; do
echo $x
done
discord:~ $ /tmp/test.sh
productid | name | price
-----------+-----------+-------
1 | Notepad | 1.99
3 | Legal Pad | 2.99
(2 rows)
discord:~ $ cat my_log
psql -c 'select * from products;' jefftest
At any rate, if that's still a problem, you can turn off globbing, do what
needs doing, then turn on globbing like the following:
#!/bin/bash
#
# Turn off globbing
#
set -o noglob
# ...
# Do your * laden work here
# ...
# Turn on globbing
set +o noglob
Two reasonable workarounds come to mind:
1. Turn off Bash's pathname expansion: #!/bin/bash -f
This will of course disable it script-wide, and thus will break any place you
actually are trying to use this feature, if at all.
2. Don't put an * in the variable.
If all you're really doing is replacing the table name then only stick that
into a variable, say tablename, and directly execute the rest:
psql -d test -c "SELECT * FROM $tablename" | while etc
Worst case, you'll end up with a messy $leftside and $rightside variable set.
To answer the original question, the field must be hard coded either as a list
or that perhaps over-used(?) asterisk. If you really need to pull and use that
from the table definition you'll need two round trips to the server.
--
Jeff Frost, Owner <[EMAIL PROTECTED]>
Frost Consulting, LLC http://www.frostconsultingllc.com/
Phone: 650-780-7908 FAX: 650-649-1954
---------------------------(end of broadcast)---------------------------
TIP 7: You can help support the PostgreSQL project by donating at
http://www.postgresql.org/about/donate