Tôi muốn chạy một bash subshell, (1) chạy một vài lệnh, (2) và sau đó vẫn ở trong subshell đó để làm như tôi muốn. Tôi có thể làm từng việc một:
Chạy lệnh bằng
-c
cờ:$> bash -c "ls; pwd; <other commands...>"
tuy nhiên, nó ngay lập tức trở về shell "super" sau khi các lệnh được thực thi. Tôi cũng có thể chạy một subshell tương tác:
Bắt đầu
bash
quy trình mới :$> bash
và nó sẽ không thoát khỏi subshell cho đến khi tôi nói rõ ràng như vậy ... nhưng tôi không thể chạy bất kỳ lệnh ban đầu nào. Giải pháp gần nhất tôi tìm thấy là:
$> bash -c "ls; pwd; <other commands>; exec bash"
hoạt động, nhưng không phải theo cách tôi muốn, vì nó chạy các lệnh đã cho trong một lớp con, sau đó mở một lệnh riêng để tương tác.
Tôi muốn làm điều này trên một dòng duy nhất. Khi tôi thoát khỏi lớp con, tôi nên quay lại lớp vỏ "siêu" thông thường mà không gặp sự cố. Phải có một cách ~ ~
NB: Điều tôi không hỏi ...
- không hỏi nơi để có được một trang bash man
- không hỏi làm thế nào để đọc các lệnh khởi tạo từ một tệp ... Tôi biết cách thực hiện điều này, đó không phải là giải pháp tôi đang tìm kiếm
- không quan tâm đến việc sử dụng màn hình tmux hoặc gnu
- không quan tâm đến việc đưa ra bối cảnh này. Tức là, câu hỏi có nghĩa là chung chung, và không nhằm mục đích cụ thể
- nếu có thể, tôi muốn tránh sử dụng các cách giải quyết khác để thực hiện những gì tôi muốn, nhưng theo cách "bẩn". Tôi chỉ muốn làm điều này trên một dòng duy nhất. Đặc biệt, tôi không muốn làm một cái gì đó như
xterm -e 'ls'
exec bash
giải pháp liên quan đến hai subshells riêng biệt. Tôi muốn một subshell liên tục.
exec
nó là nó thay thế lớp con đầu tiên bằng cái thứ hai, vì vậy bạn chỉ còn lại 1 vỏ bên dưới cha mẹ. Nếu các lệnh khởi tạo của bạn đặt các biến môi trường, chúng sẽ tồn tại trong trình bao thực thi.
exec
là bạn mất bất cứ thứ gì không được truyền vào các mạng con thông qua môi trường, chẳng hạn như các biến không xuất, hàm, bí danh, ...
exec bash
giải pháp không phù hợp với bạn?