Lệnh Ctrl + C không kết thúc vòng lặp vô hạn (while)


5

Tôi có kịch bản nhỏ này. Khi tôi khởi động nó và thiết bị đầu cuối có tiêu điểm Ctrl+ Cdừng feh và sau đó vòng lặp while bắt đầu lại feh. Tôi hy vọng rằng, miễn là thiết bị đầu cuối (!) Có trọng tâm, Ctrl+ Clàm gián đoạn vòng lặp while và cũng sẽ giết chết feh.

#!/bin/bash

sleep 2
while true; do
feh --cycle-once -zD $1 *.png
done

Ai đó có thể cho tôi biết làm thế nào tôi có thể có được hành vi ưa thích ở đây?


1
$ 1 được cho là gì?
Sergiy Kolodyazhnyy

3
Tôi tin rằng Ctrl + C chỉ giết chết feh, nhưng không phải là vòng lặp while. Bạn có thể sử dụng Ctrl + Z để dừng và sau đópkill scriptname
Sergiy Kolodyazhnyy

1
Liệu SIGQUIT(CTRL + \\) làm việc? Nếu không, bạn cần phải giết quá trình bằng cách sử dụngSIGKILL
heemayl

Câu trả lời:


3

Thử đi:

#! /bin/bash

sleep 2
while feh --cycle-once -zD $1 *.png; do :; done

Bằng cách này, chu trình sẽ kết thúc khi feh thoát với trạng thái khác không (giống như khi bạn chấm dứt nó).


1
:cũng giống như true, nhưng có một lỗi đánh máy trong bài: cần có một khoảng trắng giữa do:.
egmont

2

Bẫy tín hiệu INT, ví dụ: Ctrl+C

thêm thông tin ở đây

trap trapint 2
function trapint {
    exit 0
}

Trong mã của bạn như thế này:

#!/bin/bash

trap trapint 2
function trapint {
    exit 0
}

sleep 2
while true; do
feh --cycle-once -zD $1 *.png
done
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.