Pytanie nie znaleziono polecenia źródła w powłoce sh


Mam skrypt linuxa, który używa sh shell. Wystąpił błąd w linii, która używa polecenia "source". Zasadniczo wydaje się, że "źródło" nie jest zawarte w mojej powłoce sh. Jeśli wprowadzę sh i wprowadzę źródło, otrzymam:

sh: 1: source: not found

Czy powinienem jawnie zainstalować "źródło"? Czy mam złą wersję powłoki sh?


76
2017-12-04 12:01


pochodzenie


Można rozsądnie argumentować, że skorupa, która obsługuje source jest "złą wersją". - William Pursell
Ponadto komunikat o błędzie source: not found oznacza, że source komenda została poprawnie oceniona, ale plik, który powinien przeczytać, nie istnieje. - Simon Richter
Nie można "zainstalować" source  bo jest to cecha powłoki. Nie można go zaimplementować jako polecenia zewnętrznego. - Christopher Schultz


Odpowiedzi:


/bin/sh jest zwykle jakąś inną powłoką próbującą naśladować The Shell. Używa wielu dystrybucji /bin/bash dla sh, to wspiera source. Jednak w systemie Ubuntu /bin/dash jest używany, który nie obsługuje source. Jeśli nie możesz edytować skryptu, spróbuj zmienić powłokę, która go uruchamia.


63
2017-12-04 12:26



Dzięki! Wymiana / bin / sh z / bin / bash działało na Ubuntu! Jestem ciekawy dlaczego, czy to oznacza na Ubuntu bash sh? - Milad
@Milad: na ostatnim Ubuntusie, /bin/sh połączenia /bin/dash. Tradycyjnie, /bin/sh nazywa /bin/bash jest tryb zgodności sh. - choroba
@Milad Myślę, że to nie działa na Ubuntu 14.04. Jaka jest twoja wersja systemu operacyjnego? - Reza Ameri
Może pomoc znana - jeśli masz skrypty kaskadowe, zmień nazwę wszystkich "sh -> bash". Dziękuję Ci. :-) - BG Bruno


W powłoce Bourne'a (sh) użyj. polecenie do źródła pliku

. filename

77
2017-12-04 12:03



Naprawdę nie mogę zmienić skryptu, działa dobrze na serwerze redhat. Ale na tym serwerze źródło wydaje się być zawarte w sh - Milad
Jeśli tak source nie jest to ściśle sh. - tripleee
Miałem tego rodzaju problem na Jenkins (próbując znaleźć plik zapisany jako "tajny plik") i pozyskując przez "." polecenie było rozwiązaniem. - Jan Vlcinsky
To powinna być najwyższa odpowiedź, ponieważ będzie działać z sh, dash i bash. - akhan
W celu zapewnienia zgodności z Mac OS (środowisko programisty) i Travis-CI (środowisko testowe) musiałem użyć . ./filename. W przeciwnym razie dostałbym sh: 1: .: filename: not found błąd podczas uruchamiania testów Travis-CI. - Adrien Joly


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

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

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

Wtedy wszystko będzie dobrze


31
2018-01-07 06:16



Miły! Używam serwerów RHEL i Ubuntu i zawsze mam małe problemy, takie jak ten z Ubuntu. Naprawdę lubię RHEL i RHEL jak linux. - radtek
Przyjęta odpowiedź nie działa w systemie Ubuntu 14, to prawda! - rohithpr


The source builtin to bashism. Napisz to po prostu jako . zamiast.

na przykład

. $FILE

# OR you may need to use a relative path (such as in an `npm` script):

. ./$FILE

https://wiki.ubuntu.com/DashAsBinSh#source


8
2017-07-13 19:38





The source polecenie jest wbudowane w kilka powłok. Jeśli posiadasz skrypt, powinien on określić, która powłoka ma być używana w pierwszym wierszu, na przykład:

#!/bin/bash

7
2017-12-04 12:04



Cóż, mówi #! / Bin / sh i na innym linuksie, jeśli ręcznie wprowadzę sh i zapytam "jakie źródło" to mi mówi: source: shell wbudowane polecenie - Milad
och, więc to jest właśnie ta linia. Zawsze się zastanawiałem. wielkie dzięki! - commonSenseCode


Ten problem występuje, ponieważ program jenkins Execute Shell uruchamia skrypt za pośrednictwem jego / bin / sh

W konsekwencji / bin / sh nie zna "źródła"

Trzeba tylko dodać poniższą linię u góry powłoki Execute w jenkins

#!/bin/bash

3
2018-01-25 09:06





Znalazłem w gnu Makefile na Ubuntu, (gdzie / bin / sh -> bash)

Musiałem użyć. polecenie, a także określ skrypt docelowy z prefiksem ./ (patrz przykład poniżej)

źródło nie działało w tym przypadku, nie wiem dlaczego, ponieważ powinno wywoływać / bin / bash.

Moja zmienna środowiskowa SHELL jest również ustawiona na / bin / bash

test:
    $(shell . ./my_script)

Uwaga: ta próbka nie zawiera znaku tabulacji; musiałem sformatować do wymiany stosów.


0
2017-10-07 18:28





źródło to wbudowane polecenie bash, aby wykonać polecenie source, możesz zalogować się jako root.

sudo -s source ./filename.sh


0
2017-08-15 08:42





Bourne shell (sh) używa zmiennej PATH do zlokalizowania source <file>. Jeśli plik, który próbujesz pobrać, nie znajduje się na twojej ścieżce, pojawi się błąd "nie znaleziono pliku".

Próbować:

source ./<filename>

-1
2017-10-08 08:25



Post mówi sh: 1: source: not found nie file not found - Cristian Chaparro A.