Если вы использовали Nautilus для подключения к smb-серверу, может оказаться полезной следующая команда:
mount -v | grep -i 'gvfs'
«Подстановка команд» — это название функции языка оболочки, которая позволяет выполнять команду и заменять вывод этой команды (заменой )текста команды.
Никакая другая функция языка оболочки не позволяет вам сделать это.
Подстановка команды, т. е. полное $(...)
выражение, заменяется его выходными данными, что является основным использованием подстановок команд.
Команда, которую выполняет подстановка команд, выполняется в подоболочке, что означает, что она имеет собственную среду, которая не повлияет на среду родительской оболочки.
Не все выполнения подоболочек являются подстановками команд, хотя (см. дополнительные примеры в конце ).
Пример, показывающий, что подстановка команд выполняется в подоболочке:
$ s=123
$ echo "hello $( s=world; echo "$s" )"
hello world
$ echo "$s"
123
Здесь переменная s
установлена в строку 123
. В следующей строке вызывается echo
для строки, содержащей результат подстановки команд.Подстановка команды устанавливает s
в строку world
и выводит эту строку. Строка world
— это вывод команды в подстановке команд , и, таким образом, если бы это было запущено под set -x
, мы бы увидели, что вторая строка выше была бы расширена до echo 'hello world'
, который производит hello world
на терминале:
$ set -x
$ echo "hello $( s=world; echo "$s" )"
++ s=world
++ echo world
+ echo 'hello world'
hello world
(bash
добавляет дополнительный уровень +
подсказок на каждый уровень подоболочки подстановки команд в выводе трассировки, другие оболочки могут этого не делать)
Наконец, мы показываем, что команда внутри подстановки команд выполнялась в своей собственной подоболочке, поскольку это не повлияло на значение s
в вызывающей оболочке (значение s
по-прежнему 123
, а не world
).
Существуют и другие ситуации, когда команды выполняются в подоболочках, например,
echo 'hello' | read message
В bash
, если вы не установите lastpipe
параметр (только в не -интерактивных экземплярах ), read
выполняется в подоболочке, что означает, что $message
не будет изменено в родительской оболочке, т.е. выполнение echo "$message"
после приведенной выше команды будет отображать пустую строку (или любое другое значение $message
, которое было до ).
Замена процесса в bash
также выполняется в подоболочке:
cat < <( echo 'hello world' )
Это также отличается от подстановки команд.
a=$(command)
сохранит значение результата command
в переменной.
На самом деле больше ничего нет.
В качестве примечания, я полагаю,:
a=`command`
устарел и имеет то же значение, что и выше.