切换到父 shell 而不注销

切换到父 shell 而不注销

假设我从本地帐户开始:

avindra@host:~>

然后我切换到root:

host:~ #

然后我切换到oracle:

[ oracle@host:~]

有没有办法让我在不退出 oracle shell 的情况下返回 root shell(父 shell)?

这样会很方便,因为 oracle 帐户才不是拥有 sudo 权限。 oracle 的一个典型场景是我最终位于 /some/rely/deeply/nested/ 目录中,并且各种特殊环境变量都以特定方式设置。

问题来了:我需要回到 root 权限才能访问一些系统文件。是的,我可以注销 oracle 以返回 root,但代价是丢失当前的工作目录和环境。

有没有办法使用已知约定“切换”到父 shell?

答案1

您可以CTRL-Z使用以下命令模拟 a (通常用于临时后台进程)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到进程实际上是同一件事。

答案2

Csh、bash、ksh、zsh 都有一个suspend内置命令(或 ksh 中的别名)来执行此操作。该命令主要相当于向 shell 发送 TSTP 信号; bash 和 zsh 执行一些额外的信号处理程序和杂耍,在这些 shell 中,suspend即使 shell 当前忽略 TSTP,该命令也能工作。

您还可以使用 手动将信号发送到 shell kill -STOP $$

答案3

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

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

相关内容