Làm thế nào để chuyển đổi / chage id người dùng với một tập lệnh bash để thực thi các lệnh trong cùng một tập lệnh?


12

Có cách nào để chuyển danh tính người dùng trong tập lệnh (được thực thi dưới dạng root như một phần của quy trình cài đặt) để thực thi một số lệnh mà không gọi tập lệnh bên ngoài, sau đó quay lại rootđể chạy các lệnh khác không?

Sắp xếp của:

#!/bin/bash
some commands as root
SWITCH_USER_TO user
some commands as user including environment variables checks, without calling an external script
SWITCH_USER_BACK
some other stuff as root, maybe another user id change...


Bạn nên xem câu trả lời này stackoverflow.com/a/17758312/1243547
Klaus

Câu trả lời:


27

Không. Nhưng bạn có thể sử dụng sudođể chạy shell và sử dụng heredoc để cung cấp cho nó lệnh.

#!/bin/bash
whoami
sudo -u someuser bash << EOF
echo "In"
whoami
EOF
echo "Out"
whoami

Điều này chắc chắn thực hiện công việc trong việc giữ mọi thứ trong cùng một kịch bản và cũng có thể sử dụng thay thế lệnh nếu mọi thứ được gói bằng dấu ngoặc đơn sau EOF
a1an

Câu trả lời này tốt hơn tất cả các câu trả lời trong câu hỏi mà câu hỏi này trùng lặp .
Dan Dascalescu

1
Tôi gần như tự hỏi, nếu tôi làm điều này, tôi sẽ không sử dụng EOF, và thay vào đó thay đổi tên của di sản thành SUDO. Bằng cách đó, tôi sẽ nhớ rằng tôi đang chạy như một siêu người dùng bên trong mã chứa.
Joe Heyming

Vì một số lý do, có vẻ như cài đặt các vars trong lệnh heredoc, các vars không được đặt. Nếu tôi thử BLA="something"và sau đó, ví dụ : echo "In: $BLA", có vẻ như BLA trống rỗng
Efren
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.