sh 쉘에서 소스 명령을 찾을 수 없음


146

sh쉘 을 사용하는 스크립트가 있습니다. source명령 을 사용하는 줄에 오류가 발생합니다 . sourcesh껍질에 포함되어 있지 않은 것 같습니다 .

source쉘에서 명시 적으로 실행하려고하면 다음 과 같은 결과가 나타납니다.

sh: 1: source: not found

어떻게 든 "소스"를 설치해야합니까? 버전이 잘못 sh되었습니까?


1
지원하는 쉘이 source"잘못된 버전" 이라고 합리적으로 주장 할 수 있습니다.
William Pursell

1
또한 오류 메시지 source: not foundsource명령이 올바르게 평가되었지만 읽었어야하는 파일이 존재하지 않음을 의미합니다.
Simon Richter

4
쉘의 기능 source 이므로 "설치"할 수 없습니다 . 외부 명령으로 구현할 수 없습니다.
Christopher Schultz

답변:


151

/bin/sh일반적으로 쉘을 모방하려는 다른 쉘입니다. 많은 배포판 사용 /bin/bash을 위해 sh, 그것은 지원합니다 source. 그러나 우분투에서는를 /bin/dash지원하지 않는가 사용됩니다 source. 대부분의 쉘은 .대신에 사용 합니다 source. 스크립트를 편집 할 수 없으면 스크립트를 실행하는 쉘을 변경하십시오.


2
감사! 우분투에서 / bin / sh를 / bin / bash로 바 꾸었습니다! 나는 왜 우분투 배쉬가 쉬 었는지 궁금합니까?
Milad

1
@Milad : 최근 Ubuntus에서을 /bin/sh호출합니다 /bin/dash. 전통적 으로 sh 호환 모드 /bin/sh라고 /bin/bash합니다.
choroba

@Milad 우분투 14.04에서는 작동하지 않는다고 생각합니다. OS 버전은 무엇입니까?
Reza Ameri

1
캐스케이드 스크립트가 있으면 모든 "sh-> bash"의 이름을 바꾸십시오. 감사합니다. :-)
BG Bruno

불행히도이 문제를 해결하는 방법은 나에게 직관적이지 않았지만 올바른 길을 택했습니다. SHELL := /bin/bashMakefile 상단에 추가 해야했습니다.
anon58192932

136

Bourne shell (sh)에서을 사용하십시오. 파일 소스 명령

. filename

스크립트를 변경할 수는 없으며 Redhat 서버에서 정상적으로 실행됩니다. 그러나 해당 서버에서 소스는 sh
Milad에

2
그것이 있다면 source엄격하지 않습니다 sh.
tripleee

4
Jenkins ( "비밀 파일"로 저장된 파일을 소스하려고 시도 함)에서 "."로 소싱하는이 유형의 문제가있었습니다. 명령이 해결책이었습니다.
Jan Vlcinsky 2016 년

sh, dash 및 bash와 함께 작동하므로 이것이 최고의 대답입니다.
akhan

3
Mac OS (dev 환경) 및 Travis-CI (테스트 환경)와의 호환성을 위해을 사용해야했습니다 . ./filename. 그렇지 않으면 sh: 1: .: filename: not foundTravis-CI에서 테스트를 실행할 때 오류가 발생합니다.
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

그럼 괜찮을거야


좋은! RHEL 및 Ubuntu 서버를 실행 중이며 Ubuntu에서 이와 같은 작은 문제가 항상 있습니다. 나는 RHEL을 좋아하고 RHEL은 리눅스를 좋아한다.
radtek

수락 된 답변은 Ubuntu 14에서 작동하지 않습니다.
rohithpr

답변에 추가 설명을 추가하십시오. 어떻게해야합니까? dpkg-reconfigure모든 사용자, 특히 데비안 기반 시스템이 아닌 시스템에서 액세스 할 수있는 것은 아닙니다.
Nico Haase

source: not found데비안 업그레이드 후 이전 텔넷 클라이언트의 오류를 수정했습니다 .
bjoster


9

이 문제는 jenkins Execute Shell이 ​​/ bin / sh를 통해 스크립트를 실행하기 때문에 발생합니다.

결과적으로 / bin / sh는 "source"를 모른다

젠킨스의 Execute Shell 상단에 아래 줄을 추가하면됩니다.

#!/bin/bash

주어진 질문은 결국 Jenkins와 관련이 없습니다
Nico Haase

8

source명령은 일부 쉘에 내장되어 있습니다. 스크립트가있는 경우 다음과 같이 첫 번째 행에서 사용할 쉘을 지정해야합니다.

#!/bin/bash

글쎄, 그것은 #! / bin / sh라고하고 수동으로 sh를 입력하고 "어떤 소스"를 묻는다면 다른 리눅스에서 나에게 알려줍니다 : source : shell built-in command
Milad

오, 이것이이 라인을위한 것입니다. 나는 항상 궁금했다. 큰 감사합니다!
CommonSenseCode

5

#Jenkins execute shell에서 소스 명령 을 호출하려고하는 동안이 오류가 발생했습니다 .

source profile.txt 또는 source profile.properties

소스 명령을 대체하는 것은

. ./profile.txt 또는 . ./profile.properties

참고 : 두 점 사이에 공백이 있습니다 (.)


0

우분투의 gnu Makefile에서 찾았습니다 (여기서 / bin / sh-> bash)

을 사용해야했습니다. ./ 접두어로 대상 스크립트를 지정하고 명령을 수행하십시오 (아래 예 참조).

/ bin / bash를 호출해야하므로 소스가이 인스턴스에서 작동하지 않았습니다.

SHELL 환경 변수도 / bin / bash로 설정되어 있습니다

test:
    $(shell . ./my_script)

이 샘플은 탭 문자를 포함하지 않습니다. 스택 교환을 위해 포맷해야했습니다.


0

source 는 bash 내장 명령이므로 source 명령을 실행하려면 root로 로그인 할 수 있습니다.

sudo -s source ./filename.sh


이것은 유효한 솔루션처럼 보이지 않습니다. 사용자에게 sudo 권한이 없으면 어떻게합니까? 그리고 공급 된 물건은 나중에 관리자로만 이용할 수 있으며 새로운 문제를 일으킬 수 있습니다.
Nico Haase

0

우분투에서는 sh scriptname.sh를 사용하여 파일을 실행하는 대신을 사용했습니다. scriptname.sh와 작동했습니다! 내 파일의 첫 줄에는 다음이 포함됩니다. #!/bin/bash

이 명령을 사용하여 스크립트를 실행하십시오

.name_of_script.sh

1
이것은 이미 여러 번 답변되었습니다. 이 경우 새로운 답변을 추가 할 경우 추가 정보를 제공해주십시오.
Nico Haase

-3

이것은 당신에게 도움이 될 수 있습니다 .profile. 명령으로 내 것을 다시로드하려고 시도 . .profile하고 구문 오류 가 있었기 때문에이 오류가 발생했습니다.


-6

Bourne 쉘 (sh)은 PATH를 사용하여에서 찾습니다 source <file>. 소스하려는 파일이 경로에 없으면 '파일을 찾을 수 없습니다'라는 오류가 발생합니다.

시험:

source ./<filename>

5
게시물은 sh: 1: source: not found하지 않습니다file not found
Cristian Chaparro A.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.