Subject: Bash function from psql (v14)

From: Murthy Nunna <[email-masked]>
Date: Sat, 9 Nov 2024 17:41:02 +0000

Hi,

I am trying to code bash function and call it from psql. But it is failing. How can I get this to work. Creating a separate script instead of a function works, but I do not want to do that. I have too many variables to be passed back and forth. Any ideas?

#!/bin/bash
psql -d postgres  -p 5433 <<-PSQLBLOCK
\! run-bash-function                                        -- This doesn't work
PSQLBLOCK

# Run the function outside PSQLBLOCK. This works!
run-bash-function
exit $?

# Create bash function
run-bash-function ()
{
  echo "in bash function"
}
# end of bash script

Run the above script:
./test-bash-function.sh
sh: line 1: run-bash-function: command not found
in bash function

---

From: "Efrain J. Berdecia" <[email-masked]>
Date: Sat, 9 Nov 2024 18:02:03 +0000 (UTC)

Maybe try using full path...

Yahoo Mail: Search, Organize, Conquer 
 
  On Sat, Nov 9, 2024 at 12:41 PM, Murthy Nunna<[email-masked]> wrote:   
<!--#yiv2777555521 filtered {}#yiv2777555521 filtered {}#yiv2777555521 p.yiv2777555521MsoNormal, #yiv2777555521 li.yiv2777555521MsoNormal, #yiv2777555521 div.yiv2777555521MsoNormal {margin:0in;font-size:11.0pt;font-family:"Calibri", sans-serif;}#yiv2777555521 span.yiv2777555521EmailStyle17 {font-family:"Calibri", sans-serif;color:windowtext;font-weight:normal;font-style:normal;}#yiv2777555521 .yiv2777555521MsoChpDefault {}#yiv2777555521 filtered {}#yiv2777555521 div.yiv2777555521WordSection1 {}-->
Hi,

 
#!/bin/bash

\! run-bash-function                                        -- This doesn’t work
 
PSQLBLOCK

 
run-bash-function
 
exit $?

# Create bash function
 
run-bash-function ()
 
{
 
  echo "in bash function"
 
}
 
# end of bash script

Run the above script:
 
./test-bash-function.sh

in bash function

---

From: Vijaykumar Jain <[email-masked]>
Date: Sat, 9 Nov 2024 23:52:04 +0530

> sh: line 1: run-bash-function: command not found

/*

postgres@ubuntu:/tmp$ echo 'whoami' >> myscript.sh
postgres@ubuntu:/tmp$ chmod a+x myscript.sh
postgres@ubuntu:/tmp$ psql <<EOS
\! bash /tmp/myscript.sh
EOS

postgres

*/

-- 
Thanks,
Vijay

Open to work
Resume - Vijaykumar Jain

---

From: Greg Sabino Mullane <[email-masked]>
Date: Sun, 10 Nov 2024 09:55:34 -0500

What problem are you trying to solve? If you tell us that, we can guide you
to some better solutions.

There are numerous issues here, but the most important are:

1) Calling a shell via \! invokes an entirely new process: there is no link
to the parent or grandparent process

2) The run-bash-function must be declared before being called, so that bash
code was never going to work anyway. In other words, this is valid:

run-bash-function() { echo "Here we are"; }

run-bash-function

This version is not:

run-bash-function

run-bash-function() { echo "Here we are"; }

Cheers,
Greg

---

From: Murthy Nunna <[email-masked]>
Date: Sun, 10 Nov 2024 15:21:09 +0000

Thanks, Greg.

  1.  This means what I am trying to do is not meant to work. This won’t work even if I declare the function before calling it in PSQL. I get it.
  2.  You are correct. Function must be declared before the call.

Thanks again.