shell脚本在循环中执行到gnome-terminal -- bash -c "pkill -o bash"后为什么会跳出循环
时间: 2024-02-19 08:02:42 浏览: 102
shell脚本问题
在shell脚本中,如果在循环中执行了`gnome-terminal -- bash -c "pkill -o bash"`命令,它会打开一个新的终端并执行`pkill -o bash`命令来杀死当前会话中最旧的bash进程。该命令执行后,当前会话中的bash进程将被杀死,导致当前的shell脚本也会被杀死,从而跳出循环。
要避免这种情况,可以使用以下两种方法:
1. 在`gnome-terminal`命令中添加`--disable-factory`选项,禁用gnome-terminal的进程共享功能。这将使`gnome-terminal`命令在当前会话中创建一个新的终端,而不是在新的进程中创建一个新的终端。这样,当`pkill -o bash`命令执行后,当前会话中的bash进程将被杀死,但当前的shell脚本将继续在该会话中运行,而不会被杀死。
例如,使用`--disable-factory`选项运行`gnome-terminal`命令:
```
gnome-terminal --disable-factory -- bash -c "pkill -o bash"
```
2. 在`gnome-terminal`命令中添加`--wait`选项,使`gnome-terminal`等待终端关闭后再退出。这将确保在执行`pkill -o bash`命令后,当前会话中的bash进程将被杀死,但当前的shell脚本将继续在该会话中运行,而不会被杀死。
例如,使用`--wait`选项运行`gnome-terminal`命令:
```
gnome-terminal --wait -- bash -c "pkill -o bash"
```
通过以上两种方法,可以确保在执行`pkill -o bash`命令后,当前会话中的bash进程将被杀死,但当前的shell脚本将继续在该会话中运行,而不会被杀死。
阅读全文