What does $(command) & do?
Short Answer
Given the syntax $(command) &
, the result is the same as if you took the output of running just command
and then tried to run that as a command. And all of this would be done in the background, meaning that there would be no visible output or hanging in the terminal.
For example, if we had a text file named mycommand.txt
with the contents:
echo "Hello World"
Then the command
$(cat mycommand.txt) &
would be equivalent to running
echo "Hello World" &
But since we added the ampersand (&
), we wouldn't see any output from this command, so it would be pretty useless in this example.
Long Answer (Explanation)
Dollar sign $
(Variable)
The dollar sign before the thing in parenthesis usually refers to a variable. This means that this command is either passing an argument to that variable from a bash script or is getting the value of that variable for something. The difference in bash scripting for calling on and declaring variables goes as such:
Declare a variable without the dollar sign and call it with a dollar sign. For example, a script that contains this
#!/bin/bash
STR="Hello World!"
echo $STR
Would output this
Hello World!
Parenthesis ()
- Command substitution
Command substitution allows the output of a command to replace the command itself. Command substitution occurs when a command is enclosed as follows:
$(command)
or
`command`
Bash performs the expansion by executing the command in a subshell environment and replacing the command substitution with the standard output of the command, with any trailing newlines deleted. Embedded newlines are not deleted, but they may be removed during word splitting. The command substitution $(cat file)
can be replaced by the equivalent but faster $(< file)
.
Ampersand &
- Background process
And then the ampersand, or &
symbol, is as you said, used for running it in the background.
it takes the output of "command" as a command and runs that in the background. Its functionally is comparable with "eval"