Переключиться на родительскую оболочку без выхода

29

Допустим, я начинаю с моего локального аккаунта:

avindra@host:~>

затем я переключаюсь на root:

host:~ #

Затем я переключаюсь на оракула:

[ oracle@host:~]

Есть ли способ для меня вернуться в корневую оболочку (родитель), не выходя из оболочки оракула?

В этом случае это было бы удобно, поскольку учетная запись oracle не имеет привилегий sudo. Так, например, я нахожусь в каталоге / some / реально / deeply / nested / в oracle, и у меня есть все виды специальных переменных окружения. Но мне нужно вернуться в root, чтобы перебрать некоторые системные файлы.

В настоящее время я бы выпал из оболочки oracle, чтобы вернуться в root, выполнить мои команды root, а затем переключиться обратно в Oracle. Неудобство состоит в том, что я вошел в систему с самого начала, и я теряю свой рабочий каталог и среду.

При этом, есть ли способ сделать то, что я прошу?

Авиндра Гольчаран
источник
Если вы используете рабочий стол графического интерфейса пользователя, вы можете просто открыть другое окно терминала или вкладку или даже переключиться на другую виртуальную консоль. Если нет, используйте экран, как указано в одном из ответов.
Джо
Я посмотрю на экран, я не использовал его раньше. Что касается вкладок, я предпочитаю использовать одну вкладку для хоста. Я считаю, что рабочий процесс, который влечет за собой несколько вкладок на хосте, будет громоздким. Я много работаю в кластерных хостах / распределенных системах, поэтому даже одна вкладка на узел в кластере может сбить с толку. На мой взгляд, одна вкладка = один дискретный хост.
Авиндра Гулчаран

Ответы:

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в процесс, который по сути то же самое.

Bratchley
источник
1
По zshтебе можно просто бежать suspend.
Микель
3
@Mikel, zshили csh, tcshили bash, или оболочка Bourne или ksh... (в ksh, suspend это псевдоним для'kill -s STOP $$' (обратите внимание на ошибку с отсутствующими кавычками в районе $$)).
Стефан Шазелас
2
bashделает не ловушка CTRL-Z, при нажатии CTRL-Z, ваш эмулятор терминала посылает ^Zсимвол (0x1A) к основной стороне PTy устройства. Затем дисциплина линии драйвера pty отправляет SIGTSTP в группу процессов переднего плана терминала. До этого bashне участвует вообще. Это может привести к SIGTSTP лидер группы процессов , чтобы приостановить и затемwait() , что bashделает на ней вернется.
Стефан Шазелас
5
Обратите внимание, что нет никакой гарантии, что 19это будет номер SIGTSTP. Используйте kill -s TSTPили kill -s STOP(TSTP может быть перехвачен или проигнорирован, STOP не может).
Стефан Шазелас
2
@ nyuszika7h, $$может быть только для чтения, но IFSэто не так. Попробуйте IFS=0123456789; suspendв ksh, например.
Стефан Шазелас
3

Csh, bash, ksh, zsh имеют suspendвстроенную команду (или псевдоним в ksh), которая делает именно это. Эта команда в основном эквивалентна отправке сигнала TSTP в оболочку; bash и zsh делают немного дополнительного обработчика сигналов и манипулирования, и в этих оболочках suspendкоманда работает, даже если оболочка в настоящее время игнорирует TSTP.

Вы также можете отправить сигнал в оболочку вручную с помощью kill -STOP $$.

Жиль "ТАК - перестань быть злым"
источник
0

Я также хотел бы предложить, чтобы вы могли использовать (установить при необходимости) программу под названием, [screen][1]которая позволит вам открыть несколько окон терминала. Он был разработан для TTYS, поэтому работает без проблем.X . Вы можете использовать сочетания клавиш для переключения между терминалами и отключения и выхода из системы, оставив свои терминалы в рабочем состоянии, затем войдите в систему и подключитесь к ним снова.

Я полагаю, что большинство дистрибутивов Linux имеют пакеты для этой программы, и я использовал пакеты для Solaris. В худшем случае, конечно, вы можете установить из исходного кода.

Силиконовая долина
источник
Это может быть более уместным в качестве комментария, чем ответа.
Бармар