Làm thế nào để kiểm tra xem mật khẩu sudo đã được nhập cho phiên cuối này chưa?


16

Như đã nói trong tiêu đề, tôi cần kiểm tra xem mật khẩu sudo đã được nhập cho phiên cuối này trong một vỏ (hay chưa, nếu bây giờ tôi có quyền sudo).

Nếu tôi có nó, tôi muốn làm một thứ và nếu tôi không có nó, thì nó không nên nhắc tôi về nó, hãy để tôi làm một việc khác.

Vì vậy, trong mã giả nó trông như thế này:

if (sudo = true)
   echo "i got sudo"
else
   echo "i dont have sudo"
fi

Nhưng tất cả các lệnh tôi đã tìm thấy cho điều này luôn nhắc tôi về mật khẩu sudo khi cố gắng kiểm tra.

Ý tưởng cơ bản là tập lệnh có thể (và sẽ) yêu cầu mật khẩu sudo một vài nơi, nhưng tôi không muốn in ra "Tập lệnh bây giờ sẽ yêu cầu mật khẩu sudo của bạn." nếu nó đã được nhập (có nghĩa là nó sẽ không yêu cầu mật khẩu sudo).

Hy vọng ai đó có thể giúp tôi.

Câu trả lời:


21

Bạn có thể dùng:

if sudo -n true 2>/dev/null; then 
    echo "I got sudo"
else
    echo "I don't have sudo"
fi

Các -ntùy chọn (không tương tác) ngăn chặn sudotừ khiến người dùng nhập mật khẩu. Nếu mật khẩu được yêu cầu để lệnh chạy, sudosẽ hiển thị thông báo lỗi (được chuyển hướng đến /dev/null) và thoát. Nếu mật khẩu không bắt buộc, thì biểu thức này là đúng : sudo -n true 2>/dev/null.


4
Nó không thực sự giúp lặp lại một chuỗi và so sánh nó với một chuỗi khác, mã thoát khỏi sudo là đủ cho thử nghiệm. Dòng đầu tiên có thể làif sudo -n true 2>/dev/null; then
Steven K

@StevenKath Nó cũng làm điều tương tự, nhưng cảm ơn vì đã gợi ý. Tôi đã cải thiện câu trả lời của tôi vì đề nghị của bạn là thanh lịch hơn.
Radu Rădeanu

2
Tôi biết đây là AskUbfox, nhưng điều này không hoạt động trong MacOSX, sudo -n luôn trả về 0 nên việc kiểm tra mã trả về thất bại. Tôi đang nói điều này ở đây bởi vì tôi đã tìm kiếm cái này và trang này xuất hiện trong Google.
Normadize

1
Đây là một ý tưởng tồi vì nó sẽ gửi thư đến root mỗi khi mật khẩu được yêu cầu nếu mail_badpassđược bật trong sudoers.
nyuszika7h
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.