Cách thêm một dòng vào một tệp chỉ có quyền ghi gốc và tiếp tục thực thi tập lệnh


9

Tôi đang cố gắng học bash scripting. Tôi đang giải quyết một vấn đề thực tế và tại một thời điểm tôi cần thêm một dòng vào một tập tin cần có sự rootcho phép để viết.

Mã trông như thế này:

# some code
echo "add this line to the code" >> fileName
# some code

Có thể bằng cách nào đó làm cho tập lệnh yêu cầu mật khẩu gốc, xác thực mật khẩu và xác thực thành công sửa đổi tệp? Tập lệnh sẽ trở về chế độ người dùng và tiếp tục thực thi lệnh.

Câu trả lời:


13

Có một mẹo trong sudotrang hướng dẫn giải thích cách làm như thế này. Đây là một trong những lót của tôi:

#!/usr/bin/bash
sudo sh -c "echo \"add this line to the code\" >> fileName"

Rõ ràng, trước tiên bạn sẽ phải thiết lập người dùng của mình để có các sudođặc quyền. Các shvỏ được sử dụng vì sự chuyển hướng đến các tập tin gốc nước. Tôi cũng đã phải thoát các trích dẫn được sử dụng cho echolệnh.


2

su có sẵn trên hầu hết các hệ thống unix và nên hoạt động:

su root -c 'echo "add this line to the code" >> fileName'

Không giống như sudo, mật khẩu dường như không được lưu vào bộ nhớ cache su.
Ryne Everett

@Ryne Everett: Tôi không quen với sudo. Nhưng hành vi của 'su' thực sự là cần thiết theo kịch bản của OP. Hầu hết thời gian tôi sử dụng 'su' theo cách khác: thay đổi từ root sang người dùng khác. Trong trường hợp này không cần mật khẩu ast tất cả.
phép lạ173

1

Bạn có thể sử dụng teevới sudo:

echo "add this line to the code" | sudo tee -a filename > /dev/null

echoĐầu ra của được chuyển hướng với |( ống ) đến sudo tee. teeđọc từ đầu vào tiêu chuẩn và ghi vào đầu ra tiêu chuẩn bất kỳ tập tin nào, trong trường hợp này filename. -a(hoặc --append) tạo teethêm vào các tệp, nếu không có nó, các tệp sẽ bị ghi đè. Như teeđược chạy với sudonó mở các tập tin với quyền root. Cuối cùng, > /dev/nullngăn chặn teeđầu ra 's để đầu ra tiêu chuẩn .

Một lợi thế của việc sử dụng teethay vì chỉ bắt đầu toàn bộ lệnh bao gồm chuyển hướng bằng su -choặc sudo sh -clà, bạn không phải thay đổi trích dẫn của lệnh ban đầu theo bất kỳ cách nào (Các dòng trích dẫn có chứa dấu ngoặc kép có thể trở nên khá xấu xí).


0

Hãy thử lệnh này Lệnh này có sẵn trên Unix và Linux.

sudo sh -c "echo 'add this line to the code' >> fileName"


-2

Sẽ làm thủ thuật:

ssh host "sudo su root -c 'echo "add this line to the code" >> /etc/hosts'"

Tại sao ssh? Bạn không cần phải susudovà không làm bạn cần phải xác định rootvì nó là mặc định. Nói chung, một chút giải thích sẽ tốt hơn khi OP muốn học một cái gì đó và không chỉ là một vấn đề được giải quyết.
Adaephon

Tôi nghĩ bạn sẽ gặp rắc rối với bạn trích dẫn kép
miracle173
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.