Что такое $$ в оболочке bash? - PullRequest
9 голосов
/ 08 января 2010

Я новичок в программировании оболочки bash. Можете ли вы рассказать мне о символах '$$' в оболочке bash?

Если я попробую следующее

#> echo $$

печатает

#>18756

Можете ли вы сказать мне, для чего и когда используется этот символ?

Ответы [ 2 ]

16 голосов
/ 08 января 2010

Это идентификатор процесса самого bash.

Вы можете использовать его для отслеживания вашего процесса в течение всего его жизненного цикла - используйте ps -p, чтобы увидеть, работает ли он еще, отправьте ему сигнал с помощью kill (например, чтобы приостановить процесс), измени приоритет с renice и т. д.

Идентификаторы процесса часто записываются в файлы журналов, особенно когда одновременно запускается несколько экземпляров сценария, чтобы помочь отслеживать производительность или диагностировать проблемы.

Вот документация по bash с указанием специальных параметров.

BASHPID, упомянутый ghostdog74, был добавлен в версии 4.0. Вот пример из Расширенного руководства по написанию сценариев от Менделя Купера, в котором показана разница между $$ и $BASHPID:

#!/bin/bash4

echo "\$\$ outside of subshell = $$" # 9602
echo "\$BASH_SUBSHELL outside of subshell = $BASH_SUBSHELL" # 0
echo "\$BASHPID outside of subshell = $BASHPID" # 9602
echo

( echo "\$\$ inside of subshell = $$" # 9602
echo "\$BASH_SUBSHELL inside of subshell = $BASH_SUBSHELL" # 1
echo "\$BASHPID inside of subshell = $BASHPID" ) # 9603
# Note that $$ returns PID of parent process.
1 голос
/ 08 января 2010

если у вас есть bash, относительно близким эквивалентом является переменная BASHPID.Смотри, человек Баш

  BASHPID
      Expands  to  the  process  id of the current bash process.  This differs from $$ under certain circumstances, such as subshells
      that do not require bash to be re-initialized.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...