¿Qué hace $ (comando) y hacer?

10

Vi la siguiente sintaxis en un script bash:

 >$(command) &

Sé que el signo y &al final ejecuta un comando en segundo plano, pero nunca lo he visto en combinación con el signo de dólar más los corchetes alrededor del comando.

¿Qué hace?

Alpha Omega
fuente
Conozco ese tipo de uso $( ), pero no hay descanso. Es solo $(command) &que eso es lo que me confunde.
AlphaOmega

Respuestas:

20

Respuesta corta

Teniendo en cuenta la sintaxis $(command) &, el resultado es el mismo que si se toma la salida de correr solo commandy luego trató de correr que como un comando. Y todo esto se haría en segundo plano, lo que significa que no habría salida visible o colgando en el terminal.

Por ejemplo, si tuviéramos un archivo de texto mycommand.txtcon el contenido:

echo "Hello World"

Entonces el comando

$(cat mycommand.txt) &

sería equivalente a correr

echo "Hello World" &

Pero como agregamos el ampersand ( &), no veríamos ningún resultado de este comando, por lo que sería bastante inútil en este ejemplo.


Respuesta larga (explicación)

Signo de dólar $(variable)

El signo de dólar antes de la cosa entre paréntesis generalmente se refiere a una variable. Esto significa que este comando está pasando un argumento a esa variable desde un script bash o está obteniendo el valor de esa variable para algo. La diferencia en las secuencias de comandos bash para invocar y declarar variables es la siguiente:

Declare una variable sin el signo de dólar y llámela con un signo de dólar. Por ejemplo, un script que contiene esto

#!/bin/bash
STR="Hello World!"
echo $STR

Daría salida a esto

Hello World!

Paréntesis ()- Sustitución de comandos

La sustitución de comandos permite que la salida de un comando reemplace el comando en sí. La sustitución de comandos ocurre cuando un comando se incluye de la siguiente manera:

$(command)

o

`command`

Bash realiza la expansión ejecutando el comando en un entorno de subshell y reemplazando la sustitución del comando con la salida estándar del comando, con cualquier nueva línea final eliminada. Las líneas nuevas incrustadas no se eliminan, pero pueden eliminarse durante la división de palabras. La sustitución del comando $(cat file)se puede reemplazar por el equivalente pero más rápido $(< file).

Ampersand &- Proceso de fondo

Y luego, el &símbolo de unión, o símbolo, es como usted dijo, utilizado para ejecutarlo en segundo plano.

TheOdd
fuente
2

toma la salida de "comando" como un comando y lo ejecuta en segundo plano. Su funcionalidad es comparable con "eval"

thom
fuente
Es un símbolo presente en la ventana del terminal que, según lo que intente hacer, puede no ser necesario para que usted ingrese. Cuando abra una terminal, la verá allí inmediatamente.
monkeyman_stones
No entiendo. Aunque breve, esto responde a la pregunta real, mientras que la respuesta aceptada no.
mveroone