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.