Khởi động lại bash từ thiết bị đầu cuối mà không khởi động lại ứng dụng thiết bị đầu cuối (mac)?


46

Tôi đã nhìn xung quanh và tìm câu trả lời cho câu hỏi này nhưng dường như tôi không tìm thấy nó (điều này thật kỳ lạ).

Câu hỏi của tôi là, có cách nào đơn giản để khởi động lại phiên bash từ bên trong terminal trên mac không. Tôi chỉ muốn hành vi tương tự như khi tôi đóng ứng dụng đầu cuối và khởi động lại (tất cả các biến được đặt lại, .bash_profile có nguồn gốc, v.v.).

Tôi biết cách tìm nguồn .bash_profile, nhưng đó không phải là điều tôi muốn. Một trong những lý do tôi muốn làm điều này là vì một plugin cho dấu nhắc bash của tôi có mã ngăn màu được tải nhiều lần. Do đó, tìm nguồn cung ứng .bash_profile không tải lại các biến màu và tôi phải khởi động lại ứng dụng đầu cuối để có các thay đổi có hiệu lực.

Câu trả lời:


64

exec bash nên thay thế quy trình shell hiện tại bằng (một ví dụ mới) bash.


2
Có phải bash trong ứng dụng đầu cuối là một vỏ tương tác và sau đó exec bashchỉ khởi động lại vỏ tương tác đó? Ngoài ra, bạn có thể giải thích chính xác những gì lệnh exec thực hiện và tùy chọn của nó không? Cảm ơn!
Mattias

exec thay thế quy trình hiện tại bằng một quy trình mới. Bash có một trang viết rất hay nhưng rất khó tìm kiếm; gõ man bash, tìm phiên bản cuối cùng của chuỗi SHELL BUILTIN THÔNG TIN và sau đó cuộn xuống để thực thi. Nói tóm lại, việc truyền -ccờ sẽ chạy nó mà không có bất kỳ biến môi trường nào (có thể được yêu cầu cho mục đích của bạn, tôi không biết), và các đối số khác -l và -a có thể không phải là điều bạn muốn (chúng có vẻ là lịch sử / tối nghĩa và các tính năng cụ thể). Bạn cũng có thể sử dụng exec để mở bộ mô tả tệp mới trong shell hiện tại, nếu bạn bỏ lệnh.
Muzer

Bạn có thể đưa ra một ví dụ về cách sử dụng exec để mở bộ mô tả tệp mới trong shell hiện tại không? Và những gì về câu hỏi của tôi về vỏ tương tác / đăng nhập. Vỏ có chạy trong thiết bị đầu cuối là vỏ tương tác không và có phải tất cả các lệnh exec đều chạm vào. Cuối cùng, câu trả lời được chấp thuận của câu hỏi này đề xuất lệnh exec với cờ -l, nhưng tôi không hiểu nó làm gì. Xin lỗi vì đã hỏi rất nhiều, tôi chỉ muốn hiểu về các lệnh tôi sử dụng.
Mattias

1
Xin lỗi, vâng. Tôi không chắc chắn về máy Mac, nhưng trong thế giới Linux, ít nhất các shell chạy từ thiết bị đầu cuối đồ họa là (thường) không phải là vỏ đăng nhập và bạn chỉ khởi động lại vỏ tương tác chứ không phải chính thiết bị đầu cuối hoặc vỏ đăng nhập của bạn. -lđây là một đối số để bash và chỉ làm cho nó hoạt động như một vỏ đăng nhập. Mở mô tả tệp trong trình bao hiện tại không liên quan gì đến câu hỏi của bạn, nhưng bạn có thể sử dụng exec 4<>test.txtví dụ để tạo mô tả tệp 4 điểm thành test.txt. Sau đó, trong phần còn lại của vỏ bạn có thể làm echo test>&4để xuất ra test.txt.
Muzer

1
@Muzer vì những lý do mà tôi không thể nói rằng tôi hoàn toàn đồng ý, OSX đã quyết định rằng trình giả lập thiết bị đầu cuối GUI sẽ chạy shell đăng nhập .
terdon

1

Câu trả lời được chấp nhận là rất tốt cho trình bao sử dụng bash, đó cũng là điều mà OP đã hỏi, tuy nhiên, tôi đang sử dụng Terminal trên macOS với trình bao không mặc định (zsh) và chạy lệnh exec bashrõ ràng không có hiệu quả mong muốn : nó khởi chạy bash thay vì shell mặc định của tôi.

Vì vậy, lệnh không biết môi trường sẽ exec $SHELLsử dụng biến môi trường $SHELLlưu trữ shell mặc định cho người dùng.

Ngoài ra, lưu ý rằng Apple sẽ thay thế bash bằng zsh trong macOS Catalina để có hiệu ứng mà OP đang tìm kiếm để chạy exec zshhoặc exec $SHELLsẽ là cách để đi sau khi cập nhật lên macOS 10.15.

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.