天天看點

shell $$ 的詳解

表面上的意思是: 目前bash的PID,但是各種shell環境中要了解透。

官方解釋:

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.

輸出目前bash程序的pid。這是不同的在以下的情況中,例如沒有擷取到bash的子shell,将被重新初始化。

例子1: 

[andy@master ~]$ ps -ef |grep bash |grep -v grep

andy     30245 30244  0 Jul17 pts/0    00:00:00 -bash

[andy@master ~]$ echo $$

30245

注意: $$ 表示的是這個登入shell的程序ID(直接一andy使用者ssh連接配接登入的shell)

[andy@master ~]$ 

例子2:

[root@master std]# ps -ef |grep bash

root      4422  4421  0 Jul23 pts/0    00:00:02 -bash

root     13791  4422  0 22:14 pts/0    00:00:00 grep --color=auto bash

[root@master std]# echo $$          

4422

注意:$$表示的是登入互動式shell的PID(我本機是andy登入,然後sudo su - 到root的)

例子3:

[root@master std]# echo $$ 

[root@master std]# cat test.sh 

#/bin/bash

echo "fei jiao hu shi shell'S process pid:$$"

[root@master std]# sh test.sh  

fei jiao hu shi shell'S process pid:13858

注意:這是非互動式shell,通過腳本執行的shell,$$ 就是這個pid

例子4:

[andy@master ~]$ echo "abc" | { echo "abc"; echo $$; }

abc

注意: 管道中開辟的subshell,雖然是子shell環境,但是沒有獲得-bash程序的,是以依然是父程序的bashID。(這個有點繞,看看官方解釋的那段英文就慢慢了解吧。)

本文轉自殘劍部落格51CTO部落格,原文連結http://blog.51cto.com/cuidehua/1831910如需轉載請自行聯系原作者

cuizhiliang