sh komutunda source komutu bulunamadı


149

shKabuk kullanan bir komut dosyası var . sourceKomutu kullanan satırda bir hata alıyorum . Kabuğuma sourcedahil değil gibi görünüyor sh.

Açıkça sourcekabuktan çalıştırmayı denerseniz :

sh: 1: source: not found

Bir şekilde "kaynak" kurmalı mıyım? Uygulamasının yanlış bir sürümü var shmı?


1
Makul bir şekilde destekleyen bir kabuğun source"yanlış versiyon" olduğu söylenebilir .
William Pursell

1
Ayrıca, hata iletisi source: not found, sourcekomutun düzgün bir şekilde değerlendirildiği, ancak okuması gereken dosyanın mevcut olmadığı anlamına gelir .
Simon Richter

4
Bu "yükle" mümkün değildir source , çünkü o kabuğun bir özelliktir. Harici bir komut olarak uygulanamaz.
Christopher Schultz

Yanıtlar:


153

/bin/shgenellikle Kabuğu taklit etmeye çalışan başka bir kabuktur. Birçok dağıtım kullanmak /bin/bashiçin sh, bu destekler source. Ancak Ubuntu'da /bin/dashdesteklenmeyen kullanılır source. Çoğu mermi .bunun yerine kullanır source. Komut dosyasını düzenleyemiyorsanız, çalıştıran kabuğu değiştirmeyi deneyin.


2
Teşekkürler! / Bin / sh yerine / bin / bash kullanılması Ubuntu'da işe yaradı! Neden merak ediyorum, bu Ubuntu bash sh anlamına mı geliyor?
Milad

1
@Milad: Son Ubuntus'ta /bin/sharamalar /bin/dash. Geleneksel olarak /bin/shadlandırılan /bin/bash, sh-uyumluluk modudur.
choroba

@Milad Ben ubuntu 14.04 üzerinde çalışmıyor düşünüyorum. İşletim sistemi sürümünüz nedir?
Reza Ameri

1
Belki bilinen yardım - basamaklı komut dosyaları varsa tüm "sh -> bash" yeniden adlandırın. Teşekkür ederim. :-)
BG BRUNO

Ne yazık ki bu sorunu nasıl çözeceğimi hemen sezgisel değildi ama beni doğru yola koydu. SHELL := /bin/bashMakefile'imin üstüne eklemek zorunda kaldım .
anon58192932

136

Bourne kabuğunda (sh). bir dosyayı kaynaklama komutu

. filename

Komut dosyasını değiştirmek için gerçekten izin verilmiyor, redhat sunucusunda iyi çalışıyor. Ancak bu sunucuda, kaynak sh
Milad

2
Eğer varsa sourcekesinlikle değil sh.
üçlü

4
Jenkins ("gizli dosya" olarak saklanan bir dosyayı kaynak çalışırken) ve "." komut çözümdü.
Jan Vlcinsky

Sh, dash ve bash ile çalışacağından en iyi cevap bu olmalıdır.
akhan

4
Mac OS (dev ortamı) ve Travis-CI (test ortamı) ile uyumluluk için kullanmak zorunda kaldım . ./filename. Aksi takdirde, sh: 1: .: filename: not foundTravis-CI üzerinde testler yaparken bir hata alırdım.
Adrien Joly

49
$ls -l `which sh`
/bin/sh -> dash

$sudo dpkg-reconfigure dash #Select "no" when you're asked
[...]

$ls -l `which sh`
/bin/sh -> bash

Sonra iyi olacak


Güzel! RHEL ve Ubuntu sunucuları çalıştırıyorum ve her zaman Ubuntu ile böyle bir sorunum var. RHEL'i ve RHEL'i linux'u çok seviyorum.
radtek

Kabul edilen cevap Ubuntu 14'te çalışmıyor, bu cevap!
rohithpr

Lütfen cevabınıza biraz daha açıklama ekleyin - ne işe yarar? dpkg-reconfigureözellikle Debian tabanlı olmayan sistemlerde tüm kullanıcılar için erişilebilir olmayabilir
Nico Haase

source: not foundDebian yükseltmesinden sonra eski telnet istemcileriyle hatalarım düzeltildi , teşekkürler.
bjoster


9

Bu sorun, jenkins Execute Shell komut dosyasını / bin / sh üzerinden çalıştırdığı için oluşur

Sonuç olarak, / bin / sh "kaynak" ı bilmiyor

Jenkins'te Execute Shell'inizin üstüne aşağıdaki satırı eklemeniz yeterlidir

#!/bin/bash

Verilen soru nihayetinde Jenkins ile ilgili değil
Nico Haase

8

sourceKomut bazı kabukları içine inşa edilmiştir. Bir komut dosyanız varsa, ilk satırda hangi kabuğun kullanılacağını belirtmelidir, örneğin:

#!/bin/bash

Peki, #! / Bin / sh ve başka bir linux üzerinde manuel olarak sh girip "hangi kaynak" olduğunu sorduğumu söylüyorsa: source: shell built-in command
Milad

oh bu yüzden bu hattın amacı buydu. Hep merak etmişimdir. Kocaman teşekkürler!
CommonSenseCode

6

Ben #Jenkins execute shell kaynak komutunu çağırmaya çalışırken bu hatayla karşılaştım .

source profile.txt veya source profile.properties

Kaynak komutunun değiştirilmesi ,

. ./profile.txt veya . ./profile.properties

Not: İki nokta (.) Arasında boşluk vardır.


0

Ubuntu'da bir gnu Makefile'de buldum (nerede / bin / sh -> bash)

Kullanmam gerekiyordu. komutunu ekleyin ve hedef komut dosyasını ./ önekiyle belirtin (aşağıdaki örneğe bakın)

kaynak bu örnekte çalışmadı, neden / bin / bash çağırması gerektiğinden emin değilim.

SHELL ortam değişkenim de / bin / bash olarak ayarlandı

test:
    $(shell . ./my_script)

Bu örnekte sekme karakteri bulunmadığına dikkat edin; yığın değişimi için biçimlendirmek zorunda kaldı.


0

source bir bash yerleşik komutudur, böylece source komutunu çalıştırmak için Root olarak giriş yapabilirsiniz.

sudo -s source ./filename.sh


Bu geçerli bir çözüm gibi görünmüyor. Kullanıcının sudo izinleri yoksa ne olur? Ve daha sonra kaynaklı şeyler sadece yönetici kullanıcı olarak kullanılabilir, bu da yeni soruna neden olur
Nico Haase

0

Ubuntu'da dosyayı çalıştırmak için sh scriptname.sh kullanmak yerine kullandım. scriptname.sh ve işe yaradı! Dosyamın ilk satırı şunları içeriyor: #!/bin/bash

komut dosyasını çalıştırmak için bu komutu kullanın

.name_of_script.sh

1
Bu zaten birkaç kez cevaplanmıştır. Böyle bir durumda yeni bir cevap eklerseniz lütfen daha fazla bilgi verin
Nico Haase

-3

Bu size yardımcı olabilir, çünkü .profilebu komutu . .profilealıp komutla yeniden yüklemeye çalışıyordum ve bir sözdizimi hatası vardı


-6

Bourne kabuğu (sh) bulmak için PATH kullanır source <file>. Kaynak yapmaya çalıştığınız dosya yolunuzda değilse, 'dosya bulunamadı' hatasını alırsınız.

Deneyin:

source ./<filename>

5
sh: 1: source: not foundfile not found
Gönderi
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.