Tôi đang viết một trình bao bọc bash để tìm hiểu một số khái niệm kịch bản. Ý tưởng là viết một kịch bản trong bash và đặt nó làm vỏ của người dùng khi đăng nhập.SIGINT để hủy đọc trong tập lệnh bash?
Tôi đã tạo một khoảng thời gian là read
s và eval
s đầu vào của người dùng và sau đó nhận thấy rằng bất cứ khi nào người dùng nhập CTRL + C
, tập lệnh bị hủy bỏ để phiên người dùng kết thúc.
Để tránh điều này, tôi bị mắc kẹt SIGINT
, không làm gì trong bẫy.
Bây giờ, vấn đề là khi bạn nhập CTRL + C
ở một nửa lệnh, nó sẽ không bị hủy như một trong những điều sẽ làm trên bash - nó chỉ bỏ qua CTRL + C
.
Vì vậy, nếu tôi nhập ping stockoverf^Cping stackoverflow.com
, tôi nhận được ping stockoverfping stackoverflow.com
thay vì ping stackoverflow.com
mà tôi muốn.
Có cách nào để làm điều đó không?
#!/bin/bash
# let's trap SIGINT (CTRL + C)
trap "" SIGINT
while true
do
read -e -p "$USER - SHIELD: `pwd`> " command
history -s $command
eval $command
done
xdotool sẽ làm các trick, như 100% hack. Bạn nhận được một^^ C^A^K' và một dòng trống sẽ không hiển thị trong bash thuần túy (chỉ '^ C'), nhưng nó tốt hơn không có gì. Dù sao, nó sẽ là tuyệt vời để không phụ thuộc vào 'xdotool', và để tránh những đánh dấu thêm - nói, làm cho nó giống như bash hoạt động. Dù sao, tôi đã không nhận được lời mời rtfm ... Điều gì sẽ gỡ lỗi cho tôi thấy? – mgarciaisaia
Vâng, đây là một hack lớn. Nhưng trong tiểu bang, điều này làm công việc. Cách đúng đắn để làm theo ý tưởng ban đầu cần truy cập các bộ mô tả tập tin thông qua ioctl. –
@mgarciaisaia Về những gì * debug * có thể thực hiện và cách nó có thể được sử dụng. xem [profiling bash in nano giây] (http://stackoverflow.com/a/20855353/1765658) –