Przełącz się na powłokę nadrzędną bez wylogowania

29

Załóżmy, że zaczynam na moim koncie lokalnym:

avindra@host:~>

potem przełączam się na rootowanie:

host:~ #

Następnie przełączam się na oracle:

[ oracle@host:~]

Czy istnieje sposób na powrót do powłoki głównej (rodzica) bez wylogowania z powłoki Oracle?

Byłoby to wygodne w tym przypadku, ponieważ konto Oracle nie ma uprawnień sudo. Na przykład jestem w katalogu / some / naprawdę / deeply / nested / w oracle i mam skonfigurowane wszelkiego rodzaju specjalne zmienne środowiskowe. Ale muszę wrócić do katalogu głównego, aby dotknąć niektórych plików systemowych.

Obecnie wypadałbym z powłoki Oracle, aby wrócić do roota, uruchomić moje polecenia roota, a następnie wrócić do Oracle. Niedogodnością jest to, że loguję się od nowa i tracę katalog roboczy oraz środowisko.

Biorąc to pod uwagę, czy jest jakiś sposób na zrobienie tego, o co proszę?

Avindra Goolcharan
źródło
Jeśli używasz pulpitu GUI, możesz po prostu otworzyć inne okno lub kartę terminala, a nawet przełączyć się na inną wirtualną konsolę. Jeśli nie, użyj ekranu zgodnie z jedną z odpowiedzi.
Joe
Zajrzę do ekranu, nie korzystałem z niego wcześniej. Jeśli chodzi o karty, wolę używać jednej karty dla hosta. Uważam, że przepływ pracy, który wymaga wielu kart na jednym hoście, jest uciążliwy. Dużo pracuję w klastrowych hostach / systemach rozproszonych, więc nawet posiadanie jednej karty na węzeł w klastrze może być mylące. Moim zdaniem jedna karta = jeden dyskretny host.
Avindra Goolcharan

Odpowiedzi:

41

Możesz symulować CTRL-Z(zwykle używasz do tymczasowego tła procesu) za pomocą killpolecenia:

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

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

bashpo prostu łapie CTRL-Zkluczową kombinację. kill -19wysyła SIGSTPdo procesu, który jest faktycznie tym samym.

Bratchley
źródło
1
W zshmożna po prostu uruchomić suspend.
Mikel
3
@Mikel, zshlub csh, tcshlub bash, lub powłoka Bourne'a lub ksh... (in ksh, suspend to alias dla'kill -s STOP $$' (zwróć uwagę na błąd z brakującymi cudzysłowami wokół $$)).
Stéphane Chazelas,
2
bashrobi nie pułapka CTRL-Z, po naciśnięciu CTRL-Z, terminal emulator wysyła ^Zznak (0x1a) na stronie głównej urządzenia PTY. Dyscyplina linii kierowcy pty następnie wysyła SIGTSTP do grupy procesów planie terminala. Do tego czasu bashnie jest w ogóle zaangażowany. Ten SIGTSTP może spowodować zawieszenie lidera grupy procesów, a następnie to wait(), bashco to robi, powróci.
Stéphane Chazelas,
5
Zauważ, że nie ma gwarancji, że 19będzie liczba SIGTSTP. Użyj kill -s TSTPlub kill -s STOP(TSTP może zostać uwięziony lub zignorowany, STOP nie może).
Stéphane Chazelas,
2
@ nyuszika7h, $$ może być tylko do odczytu, ale IFSnie jest. Spróbuj IFS=0123456789; suspendna kshprzykład.
Stéphane Chazelas,
3

Csh, bash, ksh, zsh, mają suspendwbudowane polecenie (lub alias w ksh), które właśnie to robi. To polecenie jest w większości równoważne wysyłaniu sygnału TSTP do powłoki; bash i zsh wykonują dodatkową procedurę obsługi sygnału i żonglowania, aw tych powłokach suspendpolecenie działa nawet jeśli powłoka obecnie ignoruje TSTP.

Możesz również ręcznie wysłać sygnał do powłoki kill -STOP $$.

Gilles „SO- przestań być zły”
źródło
0

Sugerowałbym również, abyś mógł użyć (zainstalować w razie potrzeby) programu o nazwie, [screen][1]który pozwala otworzyć wiele okien terminala. Został zaprojektowany dla TTYS, więc działa dobrze bez potrzeby X. Możesz używać skrótów klawiaturowych, aby przełączać się między terminalami oraz rozłączać i wylogowywać się, pozostawiając terminale nadal działające, a następnie zalogować się ponownie i połączyć z nimi ponownie.

Wierzę, że większość dystrybucji Linuksa zawiera pakiety dla tego programu i użyłem do tego pakietów w systemie Solaris. Najgorszym przypadkiem jest oczywiście instalacja ze źródła.

Dolina Krzemowa
źródło
Może to być bardziej odpowiednie jako komentarz, niż jako odpowiedź.
Barmar