On Tue, 23 Jan 2007, Josh Williams wrote:
> From: Jeff Frost <jeff@frostconsultingllc.com>
>> 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
directlyexecute 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 <jeff@frostconsultingllc.com>
Frost Consulting, LLC http://www.frostconsultingllc.com/
Phone: 650-780-7908 FAX: 650-649-1954