Co robi $ (polecenie) i co robi?

10

W skrypcie bash widziałem następującą składnię:

 >$(command) &

Wiem, że znak „+” &na końcu sprawia, że ​​polecenie działa w tle, ale nigdy nie widziałem go w połączeniu ze znakiem dolara i nawiasami wokół polecenia.

Co to robi?

AlphaOmega
źródło
Znam tego rodzaju użycie $( ), ale nie ma odpoczynku. Po prostu $(command) &to mnie dezorientuje.
AlphaOmega,

Odpowiedzi:

20

Krótka odpowiedź

Ze względu na składnię $(command) &, wynik jest taki sam, jak gdybyś wziął wyjście działa tak command, a potem próbował uciec , że jako polecenie. Wszystko to odbywa się w tle, co oznacza, że ​​nie będzie widocznego wyjścia ani zawieszenia w terminalu.

Na przykład, jeśli mamy plik tekstowy o nazwie mycommand.txtz zawartością:

echo "Hello World"

Następnie polecenie

$(cat mycommand.txt) &

byłoby równoważne z uruchomieniem

echo "Hello World" &

Ale ponieważ dodaliśmy ampersand ( &), nie widzielibyśmy żadnych danych wyjściowych z tego polecenia, więc w tym przykładzie byłoby to zupełnie bezużyteczne.


Długa odpowiedź (objaśnienie)

Znak dolara $(zmienny)

Znak dolara przed rzeczą w nawiasie zwykle odnosi się do zmiennej. Oznacza to, że to polecenie albo przekazuje argument do tej zmiennej ze skryptu bash, albo otrzymuje wartość tej zmiennej za coś. Różnica w skryptach bash do wywoływania i deklarowania zmiennych przebiega następująco:

Zadeklarować zmienną bez znaku dolara i wywołać ją ze znakiem dolara. Na przykład skrypt, który to zawiera

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

Wyprowadziłbym to

Hello World!

Nawias ()- zastępowanie poleceń

Podstawienie polecenia pozwala na wyjście polecenia zastępującego samo polecenie. Podstawienie polecenia występuje, gdy polecenie jest ujęte w następujący sposób:

$(command)

lub

`command`

Bash wykonuje rozwinięcie, wykonując polecenie w środowisku podpowłoki i zastępując podstawienie polecenia standardowym wyjściem polecenia, usuwając wszelkie końcowe znaki nowej linii. Osadzone znaki nowej linii nie są usuwane, ale mogą być usuwane podczas dzielenia słów. Podstawienie polecenia $(cat file)można zastąpić równoważnym, ale szybszym $(< file).

Ampersand &- proces w tle

A potem &, jak powiedziałeś, znak „ lub” służy do uruchamiania go w tle.

Dziwne
źródło
2

pobiera dane wyjściowe „polecenia” jako polecenia i uruchamia je w tle. Jego funkcjonalnie jest porównywalny z „eval”

thom
źródło
Jest to symbol obecny w oknie terminala, który w zależności od tego, co próbujesz zrobić, może nie być potrzebny do wejścia przez ciebie. Gdy otworzysz terminal, natychmiast go zobaczysz.
monkeyman_stones
Nie rozumiem. Chociaż krótki, odpowiada na rzeczywiste pytanie, podczas gdy zaakceptowana odpowiedź nie.
mveroone