Pseudo- Sudo trên Cygwin / bash


0

Tôi cần sudo để hoạt động, cũng không phải sudo mà là cách cho phép các lệnh sudo hoạt động như được mô tả ở đây .

Điều này sẽ rất tuyệt tuy nhiên các dòng sudo có thêm đối số, như:

sudo -u user bash -c 'uptime'

Và nếu tôi sử dụng bash trong liên kết ở trên, tôi chỉ cần lấy đầu ra

/usr/bin/sudo: line 3: -u: command not found

Có cách nào để khắc phục điều này? Để làm cho nó chạy từ trích dẫn, thay vì có lẽ -c.

Câu trả lời:


1

Nếu bạn chắc chắn rằng lệnh được gửi sẽ luôn trông giống hệt

sudo -u user command...

sau đó tập lệnh sudo giả của bạn chỉ có thể đưa ra hai đối số đầu tiên:

#!/bin/bash
shift 2
exec "$@"

Nếu không, bạn phải thực hiện phân tích cú pháp đối số nhỏ:

#!/bin/bash
while getopts :u: opt
do
  # normally you'd process options and arguments here,
  # but in this case just ignore them
done
shift $((OPTIND-1))  # throw out processed options and arguments
exec "$@"

getoptsđọc và trả về các tùy chọn dòng lệnh và đối số, cho đến khi không còn nữa. Bạn có thể đọc về nó trong bash (1) ( man bash) nếu bạn muốn biết thêm về cách xử lý các đối số dòng lệnh.


Các dòng được gửi từ xa, và chúng ở định dạng đó. Người dùng họ chạy không quan trọng trong trường hợp này, chỉ cần phần còn lại để thực thi
Marcus Hughes

OK, tôi hiểu rồi. Cập nhật.
Andrew Schulman

0

Đây là những gì tôi đã sử dụng cho sudo để chạy Ansible theo babun:

#!/bin/bash
count=0

for var in "$@"
  do
    (( count++ ))
  done

shift $count
exec "$@"

Có lẽ bạn có thể sử dụng $#để đếm. # Mở rộng đến số lượng tham số vị trí trong thập phân.
Hastur
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.