O que o $ (comando) faz?

4

Eu vi a seguinte sintaxe em um script bash:

 >$(command) &

Eu sei que o e comercial & no final faz um comando ser executado em segundo plano, mas nunca o vi em combinação com o cifrão mais os colchetes ao redor do comando.

O que isso faz?

    
por AlphaOmega 06.10.2016 / 16:24

2 respostas

11

Resposta curta

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

Por exemplo, se tivéssemos um arquivo de texto chamado mycommand.txt com o conteúdo:

echo "Hello World"

Então o comando

$(cat mycommand.txt) &

seria equivalente a correr

echo "Hello World" &

Mas, como adicionamos o "e" comercial ( & ), não veríamos nenhuma saída desse comando, por isso seria inútil nesse 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 de um script bash ou está obtendo o valor dessa variável para algo. A diferença no bash scripting para chamar e declarar variáveis é a seguinte:

Declare uma variável sem o cifrão e chame-o com um cifrão. Por exemplo, um script que contenha isto

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

produziria isso

Hello World!

Parêntese () - substituição de comandos

A substituição de comandos permite que a saída de um comando substitua o comando em si. A substituição de comandos ocorre quando um comando é colocado da seguinte forma:

$(command)

ou

'command'

O Bash executa a expansão executando o comando em um ambiente de subshell e substituindo a substituição de comando pela saída padrão do comando, com quaisquer novas linhas finais excluídas. As novas linhas incorporadas não são eliminadas, 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) .

Ampersand & - processo em segundo plano

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

    
por Owen Hines 06.10.2016 / 16:42
1

ele pega a saída de "command" como um comando e executa isso em segundo plano. Sua funcionalmente é comparável com "eval"

    
por thom 06.10.2016 / 16:40

Tags