Nithin
Nithin

Reputation: 2283

How to pass a command with $() to exec.command() in golang

I want to execute a command like docker exec "$(docker-compose ps -q web)" start.sh from golang script using exec.command(). The problem is getting the command inside $() to execute.

Upvotes: 0

Views: 1421

Answers (1)

Chris Cherry
Chris Cherry

Reputation: 28554

The command inside of $() is executed and replaced with its output by your shell on the command line (typically bash but can be sh or others). exec.Command is running the program directly, so that replacement isn't happening. This means you need to pass that command into bash so it will interpret and execute the command:

bash -c "docker exec \"$(docker-compose ps -q web)\" start.sh"

Code Example:

exec.Command("/bin/sh", "-c", "docker exec \"$(docker-compose ps -q web)\" start.sh")

Alternatively, you can run docker-compose ps -q web yourself, get its output and do the substitution instead of having bash do it for you.

Upvotes: 4

Related Questions