Tôi có tập lệnh sh cần chạy dưới dạng gốc, tuy nhiên nó được chạy bởi người dùng cuối bằng sudo. Làm thế nào tôi có thể nhận được thư mục nhà người dùng khi ~/points to/root khi chạy với sudo?Nhận thư mục gốc của người dùng khi họ chạy tập lệnh dưới dạng gốc
Trả lời
Thư mục chính của người dùng sẽ là ~$SUDO_USER
. Bạn có thể sử dụng eval
như sau:
USER_HOME=$(eval echo ~${SUDO_USER})
echo ${USER_HOME}
$ sudo env |grep USER
USER=root
USERNAME=root
SUDO_USER=glglgl
Vì vậy, bạn có thể truy cập $SUDO_USER
và yêu cầu hệ thống cho homedir của mình với getent passwd $SUDO_USER | cut -d: -f6
.
Cố gắng tránh eval. Đặc biệt với gốc perms.
Bạn có thể làm:
USER_HOME=$(getent passwd $SUDO_USER | cut -d: -f6)
Cập nhật:
here là lý do để tránh eval.
Tôi đã cuộn lại bài đăng gốc. Đề xuất đơn giản hóa không chính xác. –
@downvoter: Nếu bạn downvote, sau đó xin vui lòng để lại bình luận gì là sai trong ý kiến của bạn. Nếu không thì nó không mang tính xây dựng. Cảm ơn bạn. –
Tôi đoán downvote là do thiếu lời giải thích để tránh eval? Tôi rất muốn biết lý do để tránh nó ngay bây giờ! – bunnydrug
Trừ khi tôi hiểu sai câu hỏi, khi người dùng chạy tập lệnh với sudo, biến môi trường $HOME
không thay đổi. Để kiểm tra, tôi tạo ra kịch bản này:
#!/bin/bash
#sudo_user.sh
env | grep -e USER -e HOME
... và chạy nó:
sudo ./sudo_user.sh
Output:
USER=root
HOME=/home/haiv
USERNAME=root
SUDO_USER=haiv
Sản lượng nói với tôi rằng $HOME
vẫn trỏ đến các nhà của người dùng (trong trường hợp này là /home/haiv).
- 1. Nhập tập lệnh từ thư mục gốc
- 2. Cách chạy CakePHP trong thư mục con xuất hiện dưới dạng thư mục gốc
- 3. Gọi một tập lệnh từ chương trình C gốc setuid - tập lệnh không chạy dưới dạng root
- 4. Powershell Nhận thư mục gốc của một tệp
- 5. lấy thư mục gốc của scons
- 6. Khởi chạy tập lệnh dưới dạng root thông qua ADB
- 7. Thư mục gốc là gì?
- 8. Thay đổi thư mục tập lệnh thành homedir của người dùng trong tập lệnh shell
- 9. Cách dễ nhất trong tập lệnh trình bao để đảm bảo nó không chạy dưới dạng gốc?
- 10. Nhận đường dẫn thư mục gốc của dự án PHP
- 11. Thiếu DLL khi chạy dưới dạng tập lệnh
- 12. Thư mục gốc CSS
- 13. Đặt thư mục gốc dưới sự kiểm soát nguồn (hg)
- 14. Gọi tập tin cào lồng nhau từ thư mục gốc
- 15. Chu kỳ thông qua các thư mục con và tệp trong thư mục gốc do người dùng chỉ định
- 16. Thư mục bắt đầu của loạt tệp Windows khi 'chạy dưới dạng quản trị viên'
- 17. Cách lấy thư mục gốc của CakePHP?
- 18. Cách tìm thư mục gốc của Joomla
- 19. Lấy thư mục gốc của một thư mục +1
- 20. Khi chạy pdb của Python dưới dạng tập lệnh, làm cách nào để tự động khởi chạy tập lệnh?
- 21. Cách tạo ứng dụng web .net chạy dưới dạng ứng dụng gốc trong Visual Studio
- 22. Plugin Grails Nhận Thư mục gốc hoặc Thư mục cài đặt
- 23. So sánh tập tin tar của thư mục với thư mục gốc
- 24. Lệnh để nén thư mục bằng cách sử dụng thư mục cụ thể làm gốc
- 25. Thay đổi chủ sở hữu của thư mục gốc và thư mục con (Ubuntu 13.04)
- 26. Chạy tập lệnh python dưới dạng dịch vụ cửa sổ
- 27. PostgreSQL - truy vấn từ tập lệnh bash dưới dạng người dùng cơ sở dữ liệu 'postgres'
- 28. Nhận kết quả truy vấn MySQL dưới dạng kiểu dữ liệu gốc của chúng?
- 29. Nhận cấp độ gốc của người dùng trong Active Directory bằng C#
- 30. Nhận URL gốc của ứng dụng và Tên thư mục trong ứng dụng Symfony 2
Cố gắng tránh' eval'. Xem câu trả lời của tôi mà không có 'eval'. –
Bạn không cần 'eval' ở đây. '~' Là mở rộng shell, vì vậy 'echo ~ user' là đủ. – Craig
Có, bạn cần 'eval' vì người dùng được lưu trữ trong một biến. – dogbane