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.
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
HelloWorld!
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.
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.
$( )
, ale nie ma odpoczynku. Po prostu$(command) &
to mnie dezorientuje.Odpowiedzi:
Krótka odpowiedź
Ze względu na składnię
$(command) &
, wynik jest taki sam, jak gdybyś wziął wyjście działa takcommand
, 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.txt
z zawartością:Następnie polecenie
byłoby równoważne z uruchomieniem
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
Wyprowadziłbym to
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:
lub
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 tleA potem
&
, jak powiedziałeś, znak „ lub” służy do uruchamiania go w tle.źródło
pobiera dane wyjściowe „polecenia” jako polecenia i uruchamia je w tle. Jego funkcjonalnie jest porównywalny z „eval”
źródło