Làm thế nào để chạy một kịch bản mà không đóng thiết bị đầu cuối?


69

Tôi có một tập lệnh trong tập tin bla.shvà nó có thể thực thi được. Khi tôi nhấp vào nó, tập lệnh được thực thi và cửa sổ được đóng lại. Tôi muốn cửa sổ mở .

Một cái gì đó giống như lệnh cmd /k** commandtrong Windows.

PS Tôi không muốn sử dụng pause, nhưng tôi muốn viết nhiều lệnh hơn sau khi tập lệnh được thực thi.

Câu trả lời:


81

Đặt $SHELLở cuối tập lệnh của bạn:

văn bản thay thế

Một lỗ hổng nhỏ: vì gnome-terminalkhông chạy bashnhư vỏ của nó, nó sẽ coi nó như một ứng dụng và hiển thị cảnh báo về nó khi bạn cố gắng đóng thiết bị đầu cuối:

There is still a process running in this terminal
Closing the terminal will kill it.

Tôi không tìm thấy cách nào hay để che giấu cảnh báo này. Nếu bạn muốn, bạn có thể vô hiệu hóa nó hoàn toàn bằng cách chạy:

gconftool --set /apps/gnome-terminal/global/confirm_window_close --type boolean false

Điều này không xảy ra nếu bạn đang sử dụng xtermthay vì gnome-terminal; nó có nên làm phiền bạn không


20
Bạn có thể sử dụng exec $SHELLthay vì chỉ $SHELLđể cảnh báo biến mất mà không thay đổi cài đặt.
Andrea Corbellini

1
Nhưng giải pháp này tạo ra một vỏ / quá trình thêm. Điều này có thể tránh được không?
lucasvc

Tôi không biết cách nào để làm điều này, không. Vấn đề là bạn mất khả năng xử lý trên IO tiêu chuẩn sau khi quá trình bash đầu tiên kết thúc, do đó bạn sẽ phải thực hiện một số thủ thuật với một daemon truyền trên các tay cầm này, điều này sẽ dễ bị lỗi và gây khó chịu hơn.
Stefano Palazzo

10

Sử dụng thiết bị đầu cuối Gnome

Sử dụng gnome-terminal appending, bash ở cuối chuỗi lệnh và gọi script với tùy chọn -c hoạt động. Ví dụ:

gnome-terminal -e "bash -c ~/script.sh;bash"

Điều này thực hiện như sau:

  1. mở gnome-terminal
  2. thực thi tập lệnh script.sh
  3. hiển thị dấu nhắc bash sau khi tập lệnh kết thúc.

Bạn có thể thoát khỏi cửa sổ gnome-terminal bằng cách đóng cửa sổ hoặc gõ exit tại dấu nhắc bash. Hoặc bạn có thể gõ thêm các lệnh theo yêu cầu.



7

Nếu bạn có quyền truy cập vào tập lệnh, bạn cũng có thể thêm đoạn mã sau vào cuối:

read

Mã đó sẽ đợi đầu vào trước khi đóng, vì vậy thiết bị đầu cuối sẽ mở cho đến khi bạn nhấn Enter.


1
Tôi thường sử dụng bashở cuối, nhưng readcho phép tôi đóng cửa sổ chỉ bằng ctrl+choặc enter, thay vì ctrl+shift+whoặc alt+f4. Điều này thuận tiện khi bạn lặp lại nhanh chóng trên kịch bản của bạn.
hsandt

5

Sử dụng bash's --init-filelựa chọn với một ống tạm thời:

bash --init-file <(echo './<script_name>')

Ví dụ:

bash --init-file <(echo './bla.sh')

2

Sử dụng xtermvà nối thêm ;bashvào cuối chuỗi lệnh hoạt động. Ví dụ:

xterm -e "bash ~/script.sh;bash"

Điều này thực hiện như sau:

  1. mở xterm
  2. thực thi kịch bản script.sh
  3. hiển thị dấu nhắc bash sau khi tập lệnh kết thúc.

Bạn có thể thoát khỏi cửa sổ xterm bằng cách đóng cửa sổ hoặc gõ exittại dấu nhắc bash. Hoặc bạn có thể gõ thêm các lệnh theo yêu cầu.


1
xterm -e bash --rcfile bla.sh

Điều này sẽ chạy tập lệnh trong một cửa sổ mới và thậm chí cung cấp cho bạn quyền kiểm soát cửa sổ sau khi hoàn thành.

Tuy nhiên, cửa sổ mới sẽ không tải ~/.bashrcnhư bình thường, vì chúng tôi đã chạy bla.shthay thế. Điều này có thể được khắc phục bằng cách đặt

. ~/.bashrc

ở trên đỉnh của bla.sh

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.