Quellbefehl in sh-Shell nicht gefunden


145

Ich habe ein Skript, das shShell verwendet. Ich erhalte eine Fehlermeldung in der Zeile, in der der sourceBefehl verwendet wird. Es scheint sourcenicht in meiner shShell enthalten zu sein.

Wenn ich explizit versuche, sourcevon der Shell zu laufen, bekomme ich:

sh: 1: source: not found

Sollte ich irgendwie "source" installieren? Habe ich eine falsche Version von sh?


1
Man könnte vernünftigerweise argumentieren, dass eine Shell, die unterstützt, sourceeine "falsche Version" ist.
William Pursell

1
Die Fehlermeldung source: not foundbedeutet auch, dass der sourceBefehl ordnungsgemäß ausgewertet wurde, die gelesene Datei jedoch nicht vorhanden ist.
Simon Richter

4
Eine "Installation" ist nicht möglich, source da dies eine Funktion der Shell ist. Es kann nicht als externer Befehl implementiert werden.
Christopher Schultz

Antworten:


149

/bin/shist normalerweise eine andere Shell, die versucht, The Shell nachzuahmen. Viele Distributionen verwenden /bin/bashfür sh, es unterstützt source. Unter Ubuntu /bin/dashwird jedoch verwendet, was nicht unterstützt wird source. Die meisten Muscheln verwenden .anstelle von source. Wenn Sie das Skript nicht bearbeiten können, versuchen Sie, die Shell zu ändern, auf der es ausgeführt wird.


2
Vielen Dank! Das Ersetzen von / bin / sh durch / bin / bash hat unter Ubuntu funktioniert! Ich bin gespannt warum, heißt das auf Ubuntu Bash ist sh?
Milad

1
@Milad: Bei jüngsten Ubuntus- /bin/shAnrufen /bin/dash. Traditionell /bin/shgenannt /bin/bashist Modus sh-Kompatibilität.
Choroba

@ Milad Ich denke, es funktioniert nicht auf Ubuntu 14.04. Was ist Ihre Betriebssystemversion?
Reza Ameri

1
Vielleicht helfen Sie bekannt - wenn Sie Kaskadenskripte haben, benennen Sie alle "sh -> bash" um. Danke dir. :-)
BG Bruno

Es war mir leider nicht sofort intuitiv, dieses Problem zu beheben, aber es hat mich auf den richtigen Weg gebracht. Ich musste SHELL := /bin/bashoben in meinem Makefile hinzufügen .
anon58192932

136

Verwenden Sie in der Bourne-Shell (sh) die. Befehl zum Quellen einer Datei

. filename

Ich darf das Skript nicht wirklich ändern, es läuft gut auf einem Redhat-Server. Aber auf diesem Server scheint die Quelle in sh
Milad

2
Wenn ja, ist sourcees nicht streng sh.
Tripleee

4
Ich hatte diese Art von Problem bei Jenkins (beim Versuch, eine als "geheime Datei" gespeicherte Datei zu beschaffen) und bei der Beschaffung durch "." Befehl war die Lösung.
Jan Vlcinsky

Dies sollte die beste Antwort sein, da es mit sh, dash und bash funktioniert.
Akhan

3
Aus Gründen der Kompatibilität mit Mac OS (Entwicklungsumgebung) und Travis-CI (Testumgebung) musste ich verwenden . ./filename. Andernfalls würde sh: 1: .: filename: not foundbeim Ausführen von Tests auf Travis-CI eine Fehlermeldung angezeigt.
Adrien Joly

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

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

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

Dann wird es OK sein


Nett! Ich verwende RHEL- und Ubuntu-Server und habe immer kleine Probleme wie dieses mit Ubuntu. Ich mag RHEL wirklich und RHEL mag Linux.
Radtek

Die akzeptierte Antwort funktioniert unter Ubuntu 14 nicht, diese funktioniert!
Rohithpr

Bitte fügen Sie Ihrer Antwort eine weitere Erklärung hinzu - was macht es? dpkg-reconfigureist möglicherweise nicht für alle Benutzer zugänglich, insbesondere auf Systemen, die nicht auf Debian
Nico Haase

Meine source: not foundFehler mit alten Telnet-Clients nach dem Debian-Upgrade wurden behoben, danke.
bjoster


9

Dieses Problem tritt auf, weil Jenkins Execute Shell das Skript über / bin / sh ausführt

Folglich kennt / bin / sh "Quelle" nicht.

Sie müssen nur die folgende Zeile oben in Ihrer Execute Shell in Jenkins hinzufügen

#!/bin/bash

Die gestellte Frage hat doch nichts mit Jenkins
Nico Haase

8

Der sourceBefehl ist in einige Shells integriert. Wenn Sie ein Skript haben, sollte es angeben, welche Shell in der ersten Zeile verwendet werden soll, z.

#!/bin/bash

Nun, es heißt #! / Bin / sh und unter einem anderen Linux, wenn ich sh manuell eingebe und frage "welche Quelle" es mir sagt: Quelle: Shell eingebauter Befehl
Milad

Oh, dafür war diese Linie da. Ich habe mich immer gewundert. vielen Dank!
CommonSenseCode

5

Ich konfrontiert diesen Fehler , während ich auf Anruf versuchte Quelle Befehl von #Jenkins Shell auszuführen.

source profile.txt oder source profile.properties

Ersatz für Quellbefehl ist zu verwenden,

. ./profile.txt oder . ./profile.properties

Hinweis: Zwischen den beiden Punkten (.) Ist ein Leerzeichen.


0

Ich habe in einem Gnu-Makefile unter Ubuntu gefunden (wo / bin / sh -> bash)

Ich musste das benutzen. Befehl und geben Sie das Zielskript mit dem Präfix ./ an (siehe Beispiel unten).

Quelle hat in dieser Instanz nicht funktioniert, nicht sicher warum, da es / bin / bash aufrufen sollte.

Meine SHELL-Umgebungsvariable ist ebenfalls auf / bin / bash gesetzt

test:
    $(shell . ./my_script)

Beachten Sie, dass dieses Beispiel das Tabulatorzeichen nicht enthält. musste für den Stapelaustausch formatieren.


0

source ist ein in bash integrierter Befehl. Um den Quellbefehl auszuführen, können Sie sich als Root anmelden.

sudo -s source ./filename.sh


Dies scheint keine gültige Lösung zu sein. Was ist, wenn der Benutzer keine Sudo-Berechtigungen hat? Und das bezogene Zeug ist danach nur noch als Administrator verfügbar, was neue Probleme verursachen wird
Nico Haase

0

Unter Ubuntu habe ich anstelle von sh scriptname.sh zum Ausführen der Datei verwendet. scriptname.sh und es hat funktioniert! Die erste Zeile meiner Datei enthält: #!/bin/bash

Verwenden Sie diesen Befehl, um das Skript auszuführen

.name_of_script.sh

1
Dies wurde bereits mehrfach beantwortet. Bitte geben Sie weitere Informationen an, wenn Sie in einem solchen Fall eine neue Antwort hinzufügen
Nico Haase,

-3

Dies kann Ihnen helfen. Ich habe diesen Fehler erhalten, weil ich versucht habe, meinen .profilemit dem Befehl neu zu laden, . .profileund es einen Syntaxfehler gab


-6

Bourne Shell (sh) verwendet PATH, um in zu lokalisieren source <file>. Wenn sich die Datei, die Sie beschaffen möchten, nicht in Ihrem Pfad befindet, wird der Fehler "Datei nicht gefunden" angezeigt.

Versuchen:

source ./<filename>

5
Der Beitrag sagt sh: 1: source: not foundnichtfile not found
Cristian Chaparro A.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.