로그아웃하지 않고 상위 셸로 전환

로그아웃하지 않고 상위 셸로 전환

로컬 계정으로 시작한다고 가정해 보겠습니다.

avindra@host:~>

그런 다음 루트로 전환합니다.

host:~ #

그런 다음 oracle로 전환합니다.

[ oracle@host:~]

oracle 쉘을 종료하지 않고 루트 쉘(상위 쉘)로 돌아갈 수 있는 방법이 있습니까?

oracle 계정이 있기 때문에 편리할 것입니다.확실히sudo 권한이 있습니다. oracle의 일반적인 시나리오는 /some/rely/deeply/nested/ 디렉토리에 있고 다양한 특수 환경 변수가 특정 방식으로 설정된다는 것입니다.

문제는 다음과 같습니다. 일부 시스템 파일에 액세스하려면 루트 권한으로 돌아가야 합니다. 예, Oracle에서 로그아웃하여 루트로 돌아갈 수 있지만 현재 작업 디렉토리와 환경은 손실됩니다.

알려진 규칙을 사용하여 상위 쉘로 "전환"하는 방법이 있습니까?

답변1

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]$

bashCTRL-Z키 조합을 캡처하면 됩니다 . 프로세스로 kill -19전송되는 SIGSTP것은 실제로 동일합니다.

답변2

Csh, bash, ksh, zsh에는 모두 suspend이 작업을 수행하는 내장 명령(또는 ksh의 별칭)이 있습니다. 이 명령은 기본적으로 TSTP 신호를 쉘에 보내는 것과 같습니다. bash 및 zsh는 몇 가지 추가 신호 처리기와 사이드쇼를 수행하며, 이러한 쉘에서는 suspend쉘이 현재 TSTP를 무시하더라도 명령이 작동합니다.

쉘에 수동으로 신호를 보내는 방법을 사용할 수도 있습니다 kill -STOP $$.

답변3

[screen][1]또한 여러 터미널 창을 열 수 있는 이라는 프로그램을 사용(필요한 경우 설치)하는 것이 좋습니다 . TTYS용으로 설계되었으므로 X키보드 단축키를 사용하여 터미널 간 전환, 연결 해제 및 로그아웃, 터미널 실행 상태를 유지한 다음 다시 로그인하고 다시 연결할 수 있습니다.

나는 대부분의 Linux 배포판에 이 프로그램에 대한 패키지가 있다고 생각하며 이를 Solaris에서 사용해 왔습니다. 물론 최악의 시나리오는 소스에서 설치할 수 있다는 것입니다.

관련 정보