Liên kết tượng trưng và sudo


10

Tôi tạo một liên kết tượng trưng:

ln -s /tmp/folder1 /tmp/folder2

Sau đó, tôi đi đến / tmp / thư mục2 và chạy pwd:

$ cd /tmp/folder2/
$ pwd
/tmp/folder2
$ sudo pwd
/tmp/folder1 # <-- This is the odd part

Tại sao pwdvới sudođưa ra thư mục gốc? Tôi đang viết một tập lệnh bash và cần đường dẫn tuyệt đối của thư mục hiện tại. Với sudo tôi dường như không thể có được thư mục gốc.


Mục tiêu của bạn là để pwd trả về đường dẫn vật lý (/ tmp / thư mục1) hoặc đường dẫn logic (/ tmp / thư mục 2) cho cả hai?
dùng9517

Mục tiêu là trả về đường dẫn logic khi sử dụng sudo
iDev247

Câu trả lời:


14

Lệnh pwd là cả shell dựng sẵn và / bin / pwd. Trong các trường hợp thông thường, nội dung dựng sẵn sẽ được chạy theo ưu tiên cho / bin / pwd. Lệnh pwd có thể được gọi là pwd -Lhoặc pwd -PCả hai hàm dựng sẵn và / bin / pwd pwd -Ltừ trang man

-L, --logical sử dụng PWD từ môi trường, ngay cả khi nó có chứa các liên kết tượng trưng

Vì vậy, khi bạn chạy pwd, bạn thực sự chạy pwd -L có hiệu lực in $ PWD (nếu nó tồn tại). Khi bạn chạy sudo pwd, sudo chỉ cung cấp các biến môi trường đã được thông báo để truyền qua các env_keepchỉ thị. PWD thường không có trong danh sách này, vì vậy sudo pwd phải tìm ra nó ở đâu và có hiệu lực như làpwd -P

-P, --physical tránh tất cả các liên kết tượng trưng

Cách để giải quyết vấn đề là sử dụng pwd -Pnếu bạn luôn muốn đường dẫn thư mục vật lý hoặc (như @Felix nói) để thêm PWD vào danh sách các biến môi trường để giữ thông qua một lệnh env_keep trong sudoers

env_keep += "PWD"  

Làm! Sau khi PWD được thêm vào env_keep, tôi cần phải làm sudo pwd -Lđể có được đường dẫn logic. sudo pwdtrả về con đường vật lý.
iDev247

6

Trong bash, pwdlà một nội dung. /bin/pwdmang lại hành vi tương tự như sudo pwd.

Bạn sẽ muốn

  1. sử dụng sudo pwd -L, chỉ hoạt động nếu bạn
  2. bao gồm Defaults env_keep=PWDtrong sudoerstập tin của bạn
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.