O que $ (comando) e faz?

10

Vi a seguinte sintaxe em um script bash:

 >$(command) &

Sei que o e comercial &no final executa um comando em segundo plano, mas nunca o vi em combinação com o cifrão e os colchetes ao redor do comando.

O que isso faz?

Alfa Ômega
fonte
Eu conheço esse tipo de uso $( ), mas não há descanso. É que é $(command) &isso que me confunde.
AlphaOmega

Respostas:

20

Resposta curta

Dada a sintaxe $(command) &, o resultado é o mesmo como se você tomou a saída de executar apenas commande, em seguida, tentou correr que como um comando. E tudo isso seria feito em segundo plano, significando que não haveria saída visível ou pendurado no terminal.

Por exemplo, se tivéssemos um arquivo de texto nomeado mycommand.txtcom o conteúdo:

echo "Hello World"

Então o comando

$(cat mycommand.txt) &

seria equivalente a correr

echo "Hello World" &

Porém, como adicionamos o e comercial ( &), não veríamos nenhuma saída desse comando, portanto seria bastante inútil neste exemplo.


Resposta longa (explicação)

Cifrão $(variável)

O cifrão antes da coisa entre parênteses geralmente se refere a uma variável. Isso significa que esse comando está passando um argumento para essa variável a partir de um script bash ou está obtendo o valor dessa variável para alguma coisa. A diferença no script bash para chamar e declarar variáveis ​​é a seguinte:

Declare uma variável sem o cifrão e chame-a com um cifrão. Por exemplo, um script que contém esse

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

Produziria isso

Hello World!

Parênteses ()- Substituição de comando

A substituição de comando permite que a saída de um comando substitua o próprio comando. A substituição de comando ocorre quando um comando é incluído da seguinte maneira:

$(command)

ou

`command`

O Bash executa a expansão executando o comando em um ambiente de subshell e substituindo a substituição do comando pela saída padrão do comando, com as novas linhas finais excluídas. As novas linhas incorporadas não são excluídas, mas podem ser removidas durante a divisão de palavras. A substituição do comando $(cat file)pode ser substituída pelo equivalente, mas mais rápido $(< file).

E comercial &- processo em segundo plano

E então o e comercial, ou &símbolo, é como você disse, usado para executá-lo em segundo plano.

TheOdd
fonte
2

toma a saída de "comando" como um comando e executa isso em segundo plano. Seu funcional é comparável com "eval"

thom
fonte
É um símbolo presente na janela do terminal que, dependendo do que você está tentando fazer, pode não ser necessário para você entrar. Quando você abre um terminal, você o verá imediatamente.
monkeyman_stones
Eu não entendo Embora curta, isso responde à pergunta real, enquanto a resposta aceita não.
mveroone