Beralih ke shell induk tanpa keluar


29

Katakanlah saya mulai di akun lokal saya:

avindra@host:~>

lalu saya beralih ke root:

host:~ #

Lalu saya beralih ke oracle:

[ oracle@host:~]

Apakah ada cara bagi saya untuk kembali ke shell root (induk), tanpa keluar dari shell oracle?

Akan lebih mudah dalam kasus ini, karena akun oracle tidak memiliki hak sudo. Jadi misalnya, saya berada di direktori / some / really / deep / nested / di oracle, dan saya memiliki semua jenis variabel lingkungan khusus yang diatur. Tetapi saya perlu kembali ke root untuk menyentuh beberapa file sistem.

Saat ini, saya akan keluar dari shell oracle untuk kembali ke root, menjalankan perintah root saya, kemudian beralih kembali ke Oracle. Ketidaknyamanannya adalah saya masuk dari awal yang baru, dan saya kehilangan direktori dan lingkungan kerja saya.

Yang sedang berkata, apakah ada cara untuk melakukan apa yang saya minta?


Jika Anda menggunakan desktop gui, Anda bisa membuka jendela atau tab terminal lain atau bahkan beralih ke konsol virtual lain. Jika tidak, gunakan layar seperti yang dinyatakan dalam salah satu jawaban.
Joe

Saya akan melihat ke layar, saya belum pernah menggunakannya sebelumnya. Sedangkan untuk tab, saya lebih suka menggunakan satu tab untuk host. Saya menemukan alur kerja yang memerlukan beberapa tab per host menjadi rumit. Saya melakukan banyak pekerjaan di host berkerumun / sistem terdistribusi, sehingga bahkan memiliki satu tab per node di cluster dapat membingungkan. Dalam pikiran saya, satu tab = satu host diskrit.
Avindra Goolcharan

Jawaban:


41

Anda dapat mensimulasikan CTRL-Z(yang biasanya Anda gunakan untuk latar belakang sementara proses) menggunakan killperintah:

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

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

bashhanya menjebak CTRL-Zkombinasi tombol. kill -19mengirimkan SIGSTPke proses yang secara efektif adalah hal yang sama.


1
Di dalam zshAnda hanya bisa lari suspend.
Mikel

3
@Mikel, zshatau csh,, tcshatau bash, atau shell Bourne atau ksh... (dalam ksh, menangguhkan adalah alias untuk'kill -s STOP $$' (perhatikan bug dengan tanda kutip yang hilang sekitar $$)).
Stéphane Chazelas

2
bashtidak tidak perangkap CTRL-Z, ketika Anda menekan CTRL-Z, emulator terminal Anda mengirimkan ^Zkarakter (0x1A) ke sisi master dari perangkat pty. The garis disiplin pengemudi pty kemudian mengirimkan SIGTSTP ke kelompok proses latar depan terminal. Sampai saat bashitu tidak terlibat sama sekali. SIGTSTP yang dapat menyebabkan proses pemimpin kelompok untuk menangguhkan dan kemudian yang wait()yang bashtidak pada hal itu akan kembali.
Stéphane Chazelas

5
Perhatikan bahwa tidak ada jaminan yang 19akan menjadi jumlah SIGTSTP. Gunakan kill -s TSTPatau kill -s STOP(TSTP dapat terjebak atau diabaikan, STOP tidak bisa).
Stéphane Chazelas

2
@ nyuszika7h, $$mungkin hanya bisa dibaca, tetapi IFStidak. Coba IFS=0123456789; suspenddi kshmisalnya.
Stéphane Chazelas

3

Csh, bash, ksh, zsh, memiliki suspendperintah builtin (atau alias, dalam ksh) yang melakukan hal itu. Perintah ini sebagian besar setara dengan mengirim sinyal TSTP ke shell; bash dan zsh melakukan sedikit penangan sinyal dan juggling tambahan, dan dalam shell ini suspendperintah bekerja bahkan jika shell saat ini mengabaikan TSTP.

Anda juga dapat mengirim sinyal ke shell secara manual dengan kill -STOP $$.


0

Saya juga menyarankan agar Anda dapat menggunakan (instal jika diperlukan) sebuah program bernama [screen][1]mari Anda memiliki beberapa terminal windows terbuka. Ini dirancang untuk TTYS sehingga berfungsi dengan baik tanpa perlu X. Anda dapat menggunakan pintasan keyboard untuk beralih antara terminal dan memutuskan dan keluar, meninggalkan terminal Anda tetap berjalan, lalu masuk kembali dan terhubung kembali ke mereka.

Saya percaya sebagian besar distribusi Linux memiliki paket untuk program ini, dan saya telah menggunakan paket pada Solaris untuk itu. Kasus terburuk tentu saja adalah Anda dapat menginstal dari sumber.


Ini mungkin lebih tepat sebagai komentar daripada anaswer.
Barmar
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.