Що робить $ (команда) і робить?


10

У баш-скрипті я побачив такий синтаксис:

 >$(command) &

Я знаю, що амперсанд &в кінці робить команду виконуватись у фоновому режимі, але я ніколи не бачив її в поєднанні зі знаком долара плюс дужками навколо команди.

Що це робить?


Я знаю таке використання $( ), але спокою немає. Це просто $(command) &те, що мене бентежить.
AlphaOmega

Відповіді:


20

Коротка відповідь

Враховуючи синтаксис $(command) &, результат такий же, як якщо б ви взяли результат запуску просто, commandа потім спробували запустити це як команду. І все це робилося б на задньому плані, це означає, що в терміналі не було б видимого виводу або вивішування.

Наприклад, якщо у нас був текстовий файл, названий mycommand.txtіз вмістом:

echo "Hello World"

Потім команда

$(cat mycommand.txt) &

було б рівнозначно бігу

echo "Hello World" &

Але оскільки ми додали ampersand ( &), ми не побачимо жодного виводу з цієї команди, тому в цьому прикладі було б досить марно.


Довга відповідь (пояснення)

Знак долара $(змінна)

Знак долара перед річчю в дужках зазвичай посилається на змінну. Це означає, що ця команда або передає аргумент цій змінній із сценарію bash, або отримує значення цієї змінної для чогось. Різниця в сценаріїх bash для виклику та оголошення змінних є такою:

Оголосіть змінну без знака долара і назвати його з знаком долара. Наприклад, сценарій, який містить це

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

Виведе це

Hello World!

Парентез ()- підміна команд

Заміна команди дозволяє вивести команду на заміну самої команди. Заміна команди відбувається, коли команда додається наступним чином:

$(command)

або

`command`

Bash виконує розширення, виконуючи команду в середовищі додаткової оболонки і замінюючи підстановку команди стандартним висновком команди, при цьому будь-які зворотні нові рядки видаляються. Вбудовані нові рядки не видаляються, але вони можуть бути видалені під час розбиття слів. Заміна команди $(cat file)може бути замінена на еквівалент, але швидше $(< file).

Ampersand &- фоновий процес

І тоді амперсанд, або &символ, як ви сказали, використовується для його запуску у фоновому режимі.


2

він приймає вихід команди "як команду" і запускає його у фоновому режимі. Його функціонально можна порівняти з "eval"


Це символ, присутній у вікні терміналу, який, залежно від того, що ви намагаєтесь зробити, може не знадобитися для входу вам. Відкривши термінал, ви побачите його тут же.
monkeyman_stones

Я не розумію. Незважаючи на те, що це коротко, це відповідає на власне питання, тоді як прийнята відповідь не відповідає.
mveroone
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.