在变量中保存bash $$值

时间:2017-10-31 13:26:52

标签: bash tmux

我设置了终端,这样当我打开它时,它会附加到tmux组会话并创建一个新窗口;主会话在所有终端之间共享,但每个终端都有一个干净的窗口可供使用。

我想将此窗口命名为其中运行的bash的进程ID。 基本上,我运行脚本

MYPIDVAR=$$ 
export PS1="[\u@${MYPIDVAR} \W]\$ " 

[[ ! $TERM =~ screen ]] && exec tmux new-session -s test \; new-window -n ${MYPIDVAR}

并期望我的命令提示符和tmux窗口标题都相同。但是我最终得到两个不同的数字,比如5575(在bash提示符下)和5566(作为窗口标题)。

以下是我原来的问题,有点太困惑了。

为此,我运行命令

exec tmux -2 new-session -t main \; new-window -n $ID \; set-option destroy-unattached

其中ID在脚本开头设置为$$

ID=$$

然而,tmux中窗口的标题最终与bash pid不同。窗口标题是2187

[maldus@2166 ~]$ echo $$
2166
[maldus@2166 ~]$ ps aux | grep 2156
maldus    2156  0.0  0.0  26564  4032 pts/0    Ss+  14:20   0:00 tmux -2 new-session -t main ; new-window -n 2156 ; set-option destroy-unattached
maldus    2164  0.0  0.0  35280  4000 ?        Ss   14:20   0:00 tmux -2 new-session -t main ; new-window -n 2156 ; set-option destroy-unattached
maldus    2187  0.0  0.0  10884  2288 pts/2    S+   14:20   0:00 grep 2156

因此,似乎$ID被解析为$$并被解释为启动tmux的子进程的pid,而不是之前存储的值2166。 我现在需要的是保存$$的字符串值输出,而不是立即在整个脚本中替换它。我尝试过以下方法:

ID=`echo $$`
ID="$$"
ID='$$'
ID="$(echo $$)"

没有运气。

我确信有一个简单的解决方案,我似乎无法用正确的关键字整理谷歌搜索。

1 个答案:

答案 0 :(得分:2)

使用PPID代替$$,或将ID设置为:

export ID=$PPID

适用于bash和zsh