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?
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?
Odpowiedzi:
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.
$(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!
()- 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).
&- proces w tleA potem &, jak powiedziałeś, znak „ lub” służy do uruchamiania go w tle.
pobiera dane wyjściowe „polecenia” jako polecenia i uruchamia je w tle. Jego funkcjonalnie jest porównywalny z „eval”
$( ), ale nie ma odpoczynku. Po prostu$(command) &to mnie dezorientuje.