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?


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.


2

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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.