切换到父外壳而不注销


29

假设我以我的本地帐户开始:

avindra@host:~>

然后我切换到root:

host:~ #

然后我切换到oracle:

[ oracle@host:~]

有没有一种方法可以让我回到root shell(父级),而无需退出oracle shell?

在这种情况下会很方便,因为oracle帐户没有 sudo特权。因此,例如,我在oracle的/ some / really / deeply / nested /目录中,并且设置了各种特殊的环境变量。但是我需要重新进入root才能接触一些系统文件。

当前,我将退出oracle shell以返回到root,运行我的root命令,然后切换回Oracle。给您带来的不便是,我从头开始登录,并且丢失了工作目录和环境。

话虽这么说,有什么办法可以做我要问的吗?


如果您使用的是gui桌面,则可以打开另一个终端窗口或选项卡,甚至可以切换到另一个虚拟控制台。如果不是,请使用答案之一中所述的屏幕。
2014年

我会看一下屏幕,以前没有用过。至于标签,我更喜欢使用一个标签作为主机。我发现每个主机需要多个选项卡的工作流程很繁琐。我在群集主机/分布式系统中做了很多工作,因此即使群集中每个节点只有一个选项卡也会引起混乱。在我看来,一个选项卡=一台离散主机。
Avindra Goolcharan 2014年

Answers:


41

您可以CTRL-Z使用以下kill命令模拟(通常用于暂时使进程后台运行):

[tsa20@xxx01:/home/tsa20/software]$ kill -19 $$

[1]+  Stopped                 sudo -iu tsa20
[root@xxx01 ~]# fg
sudo -iu tsa20
[tsa20@xxx01:/home/tsa20/software]$

bash只是捕获CTRL-Z组合键。kill -19发送SIGSTP的过程,实际上是同样的事情。


1
zsh你可以跑步suspend
Mikel 2014年

3
@Mikel zshcsh,,tcshbash,或Bourne shell或ksh...(在中kshsuspend是其的别名'kill -s STOP $$'(请注意在$$ 前后缺少引号的错误))。
斯特凡Chazelas

2
bash确实陷阱CTRL-Z,当按下CTRL-Z,您的终端仿真器发送一个^Z字符(0X1A)到PTY设备的主侧。然后,pty驱动程序的线路规则将SIGTSTP发送到终端的前台进程组。在那之前bash完全不参与。该SIGTSTP可能导致进程组负责人挂起,然后执行wait()bash操作的组将返回。
斯特凡Chazelas

5
请注意,不能保证19会有SIGTSTP的数量。使用kill -s TSTPkill -s STOP(可以捕获或忽略TSTP,不能使用STOP)。
斯特凡Chazelas

2
@ nyuszika7h,$$可能是只读的,但IFS不是。尝试IFS=0123456789; suspendksh为实例。
斯特凡Chazelas

3

Csh,bash,ksh,zsh具有一个suspend内置命令(或别名,在ksh中)可以执行此操作。此命令主要等效于向外壳发送TSTP信号;bash和zsh会做一些额外的信号处理程序和操作,并且在这些shell中,suspend即使shell当前忽略了TSTP,该命令仍然有效。

您也可以使用手动将信号发送到外壳kill -STOP $$


0

我还建议您可以使用(如果需要,请安装)一个名为的程序[screen][1],让您打开多个终端窗口。它是为TTYS设计的,因此无需使用也可以正常工作X。您可以使用键盘快捷键在终端之间切换以及断开连接和注销,使终端保持运行状态,然后重新登录并重新连接。

我相信大多数Linux发行版都为此程序提供了软件包,并且我在Solaris上使用了软件包。当然,最糟糕的情况是您可以从源代码安装。


这可能更适合作为评论而不是分析。
Barmar 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.