Sembolik bağlantı ve sudo


10

Sembolik bir bağlantı oluşturuyorum:

ln -s /tmp/folder1 /tmp/folder2

Sonra / tmp / folder2'ye gidip şunu çalıştırıyorum pwd:

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

Neden yok pwdolan sudoorijinal dizin vermek? Bir bash betiği yazıyorum ve geçerli dizinin mutlak yoluna ihtiyacım var. Sudo ile orijinal dizini alamıyorum gibi görünüyor.


Hedefiniz pwd'nin her ikisi için fiziksel (/ tmp / klasör1) yolunu veya mantıksal (/ tmp / klasör2) yolunu döndürmesini sağlamak mı?
user9517

Amaç sudo kullanırken mantıksal yolu döndürmektir
iDev247

Yanıtlar:


14

Pwd komutu ve / bin / pwd yerleşik bir kabuk hem de. Normal şartlar altında, yerleşik / bin / pwd yerine çalıştırılacaktır. Pwd komutu , man sayfasından yerleşik ve / bin / pwd varsayılan olarak pwd -Lveya olarak adlandırılabilirpwd -Ppwd -L

-L, - sembolik içeriyor olsa bile, çevreden PWD kullanımı

pwd'yi çalıştırdığınızda aslında pwd -L'yi çalıştırırsınız ki bu aslında $ PWD (varsa) yazdırır. Çalıştırdığınızda sudo pwd, sudo yalnızca env_keepyönergeler aracılığıyla aktarılması söylenen ortam değişkenlerini sağlar . PWD normalde bu listede değil, bu yüzden sudo pwd olduğu yerde çalışmak zorunda ve aslında şu şekilde çalışırpwd -P

-P, --fizik tüm sembollerden kaçının

Sorunu çözmenin pwd -Pyolu, fiziksel dizin yolunu sürekli olarak istiyorsanız veya (@Felix'in söylediği gibi) sudoers'ta bir env_keep yönergesi aracılığıyla tutmak için ortam değişkenleri listesine PWD eklemektir.

env_keep += "PWD"  

İşler! PWD env_keep eklendikten sonra sudo pwd -Lmantıksal yolu almak için yapmam gerekiyor . sudo pwdfiziksel yolu döndürür.
iDev247

6

Bash, pwdbir yapıdır. /bin/pwdile aynı davranışı sağlar sudo pwd.

İsteyeceksin

  1. kullanın sudo pwd -L, yalnızca
  2. dahil Defaults env_keep=PWDsizin de sudoersdosyaya
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.