将bash的$$值保存在变量中

3
我设置了终端,使得打开一个终端会附加到一个tmux组会话并创建一个新窗口;主会话在所有终端之间共享,但每个终端都有一个干净的窗口可供使用。
我想用bash进程的进程ID来命名这个窗口。基本上,我运行以下脚本:
MYPIDVAR=$$ 
export PS1="[\u@${MYPIDVAR} \W]\$ " 

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

我希望我的命令提示符和tmux窗口标题都是相同的,但是最终我得到了两个不同的数字,例如在bash提示符上是5575,在窗口标题上是5566。

以下是我的原始问题,有点混乱。


为此,我运行以下命令:

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

在脚本开头处,将ID设置为$$

ID=$$

然而,在tmux中窗口的标题与bash进程ID不同。在这里,窗口标题是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 $$)"

很遗憾,我没有找到相关资料。

我相信这个问题有一个简单的解决方案,只是我似乎无法用正确的关键词进行谷歌搜索。


ID=$$将会赋予字符串值,这一点毫无疑问。你是否假设新启动的bash shell将具有与原始bash shell相同的pid?这是不正确的,并且在tmux介入时也无法实现。 - that other guy
正如@thatotherguy所说,“ID=$$”将设置ID为pid的字符串值,因此问题必须在您的启动脚本或tmux配置中某个地方。也许“ID”在某个位置意外地被更改或设置。从您分享的内容中,无法明确地知道您是如何启动终端窗口和初始tmux会话的。请参阅如何创建最小化、完整和可验证的示例 - Jim U
我使用一个最小示例编辑了这个问题。 - Maldus
1个回答

2

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

export ID=$PPID

适用于bash和zsh


什么与什么表现出相同的行为? - Jim U
Bash和tmux窗口有两个不同的pid,就像问题中的示例一样。 - Maldus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接