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ę?


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.


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


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.


Może to być bardziej odpowiednie jako komentarz, niż jako odpowiedź.
Barmar
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.