bash 쉘 스크립트에 파일을 포함하는 방법


121

기능에 액세스 할 수 있도록 셸 스크립트에 다른 셸 스크립트를 포함하는 방법이 있습니까?

PHP 에서처럼 include단순히 함수 이름을 호출하여 내부에 포함 된 함수를 실행하기 위해 다른 PHP 파일과 함께 지시문을 사용할 수 있습니다 .



@Troubadour 참조 주셔서 감사합니다. 게시물이 source명령을 참조하더라도 문제는 source파일 위치를 정확히 찾는 방법을 묻는 것입니다 .
Mechaflash

1
"기본 질문"은 스택 오버플로의 촉매제입니다. 이 사이트는 다른 사이트와 마찬가지로 색인이 생성된다는 것을 알고 있으며 이제 "bash 쉘 스크립트에 파일을 포함하는 방법"이 Google에 표시되어 스택 오버플로에 연결되어 사이트 트래픽과 노출이 증가합니다. = D
Mechaflash

3
너 똑똑하다! 감사합니다!
Mechaflash

4
@Troubadour, 사용자가 답변을 검색해야한다고 언급하는 것은 어리석은 일입니다. 예를 들어, 오늘이 특정 질문은 "bash 포함 파일"에 대한 Google 검색 결과 중 상위를 차지했습니다. 다른 해결책을 찾기 위해이 답변을 건너 뛰어야합니까?
lwitzel

답변:


192

간단히 스크립트 안에 넣으십시오.

source FILE

또는

. FILE # POSIX compliant

$ LANG=C help source
source: source filename [arguments]
Execute commands from a file in the current shell.

Read and execute commands from FILENAME in the current shell.  The
entries in $PATH are used to find the directory containing FILENAME.
If any ARGUMENTS are supplied, they become the positional parameters
when FILENAME is executed.

Exit Status:
Returns the status of the last command executed in FILENAME; fails if
FILENAME cannot be read.

17
. 소스 반면 POSIX를 준수하지입니다
Mathieu_Du

그러나 여기 소스는 우리가 C언어 에서하는 것과 정확히 동일하지 않습니다 . 여기 소스는 기본 스크립트로 하위 스크립트를 실행합니다. 자식 스크립트에서 특정 함수를 호출하려면 어떻게해야합니까?
Paresh Mayani 2015

8
. script.sh와 혼동하지 마십시오 ./script.sh. 나는에 무슨 일이 일어나고 있는지 알아 내려고 시간을 잃었다
Tihomir Mitkov

동안 . POSIX를 준수하므로 sh, dash, zsh 및 기타 POSIX 쉘에서 작동합니다. 을 사용하는 것이 좋습니다. 일부 셸에는 자체적으로 비슷하지만 약간 다른 버전의 "소스"가있어 앱이 손상 될 수 있습니다.
Jacob Korba

51

위의 답변은 정답이지만 다른 폴더에서 스크립트를 실행하면 문제가 발생합니다.

예를 들어, a.sh그리고 b.shA가 B와 함께 포함되어, 동일한 폴더에 . ./b.sh포함하도록한다.

예를 들어를 사용하여 폴더에서 스크립트를 실행하면 xx/xx/xx/a.sh파일 b.sh을 찾을 수 없습니다 ./b.sh: No such file or directory..

나는 사용한다

. $(dirname "$0")/b.sh

33

예, 소스 또는 짧은 형식을 사용 하십시오 ..

. other_script.sh

3
노트 .버전에서 작동 sh배쉬뿐만 아니라. "소스"는 Bash에서만 작동합니다.
Sridhar Sarnobat

2

제 상황 color.sh에서 같은 디렉토리에서 를 포함하려면 init.sh다음과 같이해야했습니다.

. ./color.sh

확실하지 왜 ./이 아닌 color.sh직접. 의 내용은 color.sh다음과 같습니다.

RED=`tput setaf 1`
GREEN=`tput setaf 2`
BLUE=`tput setaf 4`
BOLD=`tput bold`
RESET=`tput sgr0`

사용은 File color.sh오류가 없지만 색상이 표시되지 않습니다. 나는 이것을 테스트 Ubuntu 18.04했으며 Bash버전은 다음 과 같습니다.

GNU bash, version 4.4.19(1)-release (x86_64-pc-linux-gnu)


그러면 현재 작업중인 디렉토리에있는 파일 init.sh이 제공됩니다 ( ./init.sh처음에 실행 한 경우 일치 ).
ricab

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.