shell脚本在循环中执行到gnome-terminal -- bash -c "pkill bash"后为什么会跳出循环
时间: 2024-02-19 10:02:52 浏览: 139
可能是因为执行 `gnome-terminal` 命令时会新开一个终端窗口,旧的终端窗口会被关闭,导致循环中断。可以尝试在命令后面加上 `&` 符号,使命令在后台执行,不会阻塞当前终端窗口。例如:
```
gnome-terminal -- bash -c "pkill bash" &
```
这样循环就能够继续执行了。不过需要注意的是,由于命令在后台执行,可能会导致一些意外的结果,需要谨慎使用。
相关问题
shell脚本在循环中执行到gnome-terminal -- bash -c "pkill -o bash"后为什么会跳出循环
在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脚本将继续在该会话中运行,而不会被杀死。
阅读全文