我是这个网站和 Linux 的新手。
我正在尝试编写一个简单的脚本,它将以新名称打开一个新终端,并关闭运行脚本的旧终端。
我遇到的问题是进程号在变化。因此,如果我启动进程并输入:echo $$
我会看到 10602。进程结束后,如果加载了新终端,进程号将更改为 10594。因此,我实际上是在终止错误的进程。
此刻我使用这个代码:
echo -n "Type new terminal name > " # displays messagebox
read text # load messagebox input
echo "$text" > /etc/terminalname # write messagebox input to file
gnome-terminal # open terminal with new name
kill -9 $PPID # this will kill the old terminal
exit # exit script
答案1
我假设您正在脚本中运行这些命令。
请记住这$$
是跑步bash 进程。如果您正在运行脚本,则该脚本的 bash 进程是当前交互式 shell 的子进程。如果您$$
在脚本中终止进程,则终止的是脚本,而不是父 shell。
Bash 将父进程的 pid 存储在$PPID
变量中,因此你需要
#!/bin/bash
gnome-terminal & # launch a new terminal
kill $PPID # kill this script's parent
我假设父 shell 是从终端生成的,并且您没有更改终端在其 shell 退出时关闭的默认行为。
顺便说一下,
echo -n "Type new terminal name > " # displays messagebox
read text # load messagebox input
做
read -p "Type new terminal name > " text
答案2
我确实根据给出的答案找到了适合此问题的解决方案。只需使用命令kill -9 $var
(其中 var 为 $PPID)即可完成。
我确实将我的起始帖子中的代码编辑成了我现在使用的脚本。感谢您的所有意见。