Chuyển sang shell cha mà không đăng xuất


29

Giả sử tôi bắt đầu trong tài khoản địa phương của mình:

avindra@host:~>

sau đó tôi chuyển sang root:

host:~ #

Sau đó, tôi chuyển sang orory:

[ oracle@host:~]

Có cách nào để tôi thả trở lại vào vỏ gốc (cha mẹ) mà không cần đăng xuất khỏi vỏ sò không?

Nó sẽ thuận tiện trong trường hợp này, vì tài khoản oracle không có đặc quyền sudo. Vì vậy, ví dụ, tôi đang trong thư mục / some / really / deep / lồng / in orory và tôi có tất cả các loại biến môi trường đặc biệt được thiết lập. Nhưng tôi cần quay lại root để chạm vào một số tập tin hệ thống.

Hiện tại, tôi sẽ bỏ trình bao oracle để quay lại root, chạy các lệnh root của mình, sau đó chuyển trở lại vào Oracle. Sự bất tiện là tôi đã đăng nhập từ một khởi đầu mới và tôi bị mất thư mục và môi trường làm việc.

Điều đó đang được nói, có cách nào để làm những gì tôi đang hỏi không?


Nếu bạn đang sử dụng máy tính để bàn gui, bạn có thể mở một cửa sổ hoặc tab thiết bị đầu cuối khác hoặc thậm chí chuyển sang bảng điều khiển ảo khác. Nếu không, sử dụng màn hình như đã nêu trong một trong những câu trả lời.
Joe

Tôi sẽ nhìn vào màn hình, tôi chưa từng sử dụng nó trước đây. Đối với các tab, tôi thích sử dụng một tab cho máy chủ lưu trữ. Tôi tìm thấy một quy trình công việc đòi hỏi nhiều tab trên mỗi máy chủ trở nên cồng kềnh. Tôi thực hiện rất nhiều công việc trong các máy chủ / hệ thống phân tán, do đó, thậm chí có một tab trên mỗi nút trong cụm có thể gây nhầm lẫn. Trong tâm trí của tôi, một tab = một máy chủ rời rạc.
Avindra Goolcharan

Câu trả lời:


41

Bạn có thể mô phỏng một CTRL-Z(mà bạn thường sử dụng để tạm thời làm nền một quá trình) bằng cách sử dụng killlệnh:

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

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

bashchỉ bẫy các CTRL-Ztổ hợp phím. kill -19gửi SIGSTPđến quá trình đó là hiệu quả tương tự.


1
Trong zshbạn chỉ có thể chạy suspend.
Mikel

3
@Mikel, zshhoặc csh, tcshhoặc bash, hoặc vỏ Bourne hoặc ksh... (trong ksh, đình chỉ là một bí danh cho'kill -s STOP $$' (lưu ý lỗi với các trích dẫn bị thiếu xung quanh $$)).
Stéphane Chazelas

2
bashthực hiện không bẫy CTRL-Z, khi bạn nhấn tổ hợp phím CTRL-Z, mô phỏng thiết bị của bạn gửi một ^Zký tự (0x1A) về phía chủ nhân của thiết bị pty. Các kỷ luật dòng của trình điều khiển pty sau đó gửi SIGTSTP vào nhóm quá trình foreground của nhà ga. Cho đến lúc đó bashkhông liên quan gì cả. SIGTSTP có thể gây ra trưởng nhóm quy trình đình chỉ và sau đó các wait()rằng bashhiện trên nó sẽ trở lại.
Stéphane Chazelas

5
Lưu ý rằng không có gì đảm bảo đó 19sẽ là số lượng SIGTSTP. Sử dụng kill -s TSTPhoặc kill -s STOP(TSTP có thể bị mắc kẹt hoặc bỏ qua, STOP không thể).
Stéphane Chazelas

2
@ nyuszika7h, $$có thể chỉ đọc, nhưng IFSkhông phải. Hãy thử IFS=0123456789; suspendtrong kshví dụ.
Stéphane Chazelas

3

Csh, bash, ksh, zsh, có suspendlệnh dựng sẵn (hoặc bí danh, trong ksh) thực hiện chính xác điều đó. Lệnh này hầu hết tương đương với việc gửi tín hiệu TSTP đến trình bao; bash và zsh thực hiện một chút xử lý tín hiệu bổ sung và tung hứng, và trong các shell này, suspendlệnh hoạt động ngay cả khi shell hiện đang bỏ qua TSTP.

Bạn cũng có thể gửi tín hiệu đến shell bằng tay kill -STOP $$.


0

Tôi cũng đề nghị bạn có thể sử dụng (cài đặt nếu cần) một chương trình có tên là [screen][1]cho phép bạn mở nhiều cửa sổ đầu cuối. Nó được thiết kế cho TTYS để nó hoạt động tốt mà không cần X. Bạn có thể sử dụng phím tắt để chuyển giữa các thiết bị đầu cuối, ngắt kết nối và đăng xuất, để các thiết bị đầu cuối của bạn vẫn chạy, sau đó đăng nhập lại và kết nối lại với chúng.

Tôi tin rằng hầu hết các bản phân phối Linux đều có các gói cho chương trình này và tôi đã sử dụng các gói trên Solaris cho nó. Trường hợp xấu nhất của khóa học là bạn có thể cài đặt từ nguồn.


Điều này có thể thích hợp hơn như là một nhận xét chứ không phải là một anaswer.
Barmar
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.