“Sudo: source: komut bulunamadı”


15
$ source /etc/environment 

$ sudo source /etc/environment 
[sudo] password for t: 
sudo: source: command not found

Görünüşe göre bashyürütmek için çalıştırılandan farklı bir kabuk var source /etc/environmentve bu kabuk sourceyerleşik olarak yok .

Ama benim ve kökün varsayılan mermileri de bash.

$ echo $SHELL
/bin/bash

Eğer sudofarklı bir kabuk indeeds kullanımlar, neden mi? Slm'nin cevabını gördüm , ama benim durumumda anlamıyorum.


4
sourcesudobir kabuk yerleşiktir ... harici bir komut gibi bir kabuk yerleşik çalıştırmak için kullanamazsınız ..
heemayl

Dosyayı okuyamayacağınız veya dosyada tanımlanan ortamın sonraki sudo komutlarına uygulanmasını istediğiniz sorun mu?
Random832

@ Random832: dosyada tanımlanan ortamın sonraki sudo komutlarına uygulanmasını isteyin
Tim

Yanıtlar:


23

sourcebir kabuk yerleşiktir, bu yüzden kabuk olmadan çalıştırılamaz. Ancak, varsayılan olarak sudokabuk çalıştırmayın. itibarensudo

İşlem modeli

Sudo bir komut çalıştırdığında fork (2) öğesini çağırır, yukarıda açıklandığı gibi yürütme ortamını kurar ve alt süreçte yürütme sistemi çağrısını çağırır

Kabuğu açıkça yürütmek istiyorsanız, şu -sseçeneği kullanın:

# sudo -s source /etc/environment

Bu hala işe yaramaz çünkü kabuk çıktıktan sonra çevre değişiklikleri kaybolur.


7

Soruyu cevaplamak yerine sorunu çözme alanında, sadece kökün okuyabileceği bir dosyayı kaynaklamanın en açık (bana göre) yolu:

source <(sudo cat /etc/environment)

Bu işlem ikamesi kullanır . catKomutun çıktısını alır ve iletebileceğiniz sahte bir dosyaya dönüştürür source. source daha sonra geçerli kabuktaki komutları çalıştırır.

En sistemlerde, Not o /etc/environmentdünya okunabilir, çok gerektiği sadece bu çalıştırmak edebilmek için:

source /etc/environment

1
Bu işe yarıyor, kabul edilen
Claudiu Creanga

2

sudobir komut bekliyor ancak komutu bulamaması için bir kabuk yerleşimi veriyorsunuz. Eğer yazarsanız type source, çıktıyı görebilirsiniz: source is a shell builtinve çıktısı which sourceboş.

Örneğin strace bir komut olduğu için sudo straceçalışacak ve which straceçıktı verecektir.

Düzenleme: Ayrıca, sudo su;sudo source /etc/environmentfarklı kabuk kullanılmaz böylece güzel çalışır görebilirsiniz .

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.