'소스'는 무엇을합니까?


584
$ whatis source
source: nothing appropriate.
$ man source
No manual entry for source
$ source
bash: source: filename argument required
source: usage: source filename [arguments]

존재하고 실행할 수 있습니다. 우분투에 왜 문서가 없습니까? 무엇을합니까? 그것에 관한 문서를 어떻게 설치할 수 있습니까?



54
당신은 잊었다 $ type source source is a shell built-in
bnjmn

2
내 껍질이 이것을 반환했습니다 $ whatis source source (1) - bash built-in commands, see bash(1). 또한, man source받는 저를 필요 BASH_BUILTINS(1)매뉴얼 페이지를 참조하십시오. 이것은 Fedora btw에 있으며, 왜 그러한 데비안 패키지가 문서화되지 않았는지 (또는 잘못) 문서화되어 있는지 잘 모릅니다.
arielnmz

4
@lesmana, 훌륭한 링크. 그 답변 은이 질문에 대한 더 철저한 답변입니다.
Scott

5
"도움말 소스"를 시도
Jasser

답변:


470

source현재 쉘에서 인수로 전달 된 파일의 내용을 실행하는 bash 쉘 내장 명령입니다 . .(마침표) 와 동의어가 있습니다.

통사론

. filename [arguments]

source filename [arguments]

8
source떠들썩한 특정 명령 또는 다른 쉘 너무 있습니까? (나는 질문에 바로 태그를 요청합니다 ...)
Jonik

2
Afaik source은 Bourne 껍질에 있었으므로 아마도 모든 자손에 존재할 것입니다. en.wikipedia.org/wiki/Bourne_shell . 모든 쉘에 source명령 이있는 것은 아니며 어떤 쉘에 포함되어 있는지 확실하지 않습니다.
nagul

13
@nagul source은 Bourne 쉘에 없었으며 훨씬 나중에 나온 GNU 확장입니다. 원래의 이식성있는 구문 (POSIX)은 "dot"명령을 사용하는 .것입니다. 나는 source타이핑하기가 길고 부가 가치가 없다는 사실을 감안할 때 개인적으로 절대 사용 하지 않습니다. 그 주된 목적은 초보자가 스크립트를 더 읽기 쉽게 만드는 것입니다.
jlliagre

18
@jlliagre 내 개인 "원본이있는 이유를 설명하십시오"는 source더 설명 할뿐만 아니라 오타 이외의 것 같습니다. 이메일로 기술 명령을 보낼 때 사람들이 마침표 / 점을 건너 뛰도록했습니다.
Rich Homolka

3
이 명령의 일반적인 용도 중 하나는 쉘 스크립트가 source"변수 파일"에서 대부분 변수 지정을 포함하는 것입니다. 변수 할당은 스크립트의 나머지 부분을 제어합니다. 물론 좋은 스크립트는 변수를 변수 앞에 적절한 기본값으로 설정 source하거나 최소한 유효한 값을 확인합니다.
LawrenceC

276

조심해! ./하고 source있는 매우 다릅니다 .

  • ./script스크립트를 실행 파일로 실행하여 새 셸 을 실행하여 실행
  • source script현재 쉘 환경 에서 filename에서 명령을 읽고 실행합니다.

참고 : ./script. script아니지만 . script==source script

https://askubuntu.com/questions/182012/is-there-a-difference-between-and-source-in-bash-after-all?lq=1


27
./command와을 섞고 있습니다. 스크립트. source-command는 .-command와 동일합니다. ./meh를 사용하면 현재 디렉토리에서 meh라는 이름의 script / binary를 실행하고 source /와는 아무런 관련이 없습니다. -명령. 링크에서 답변에 설명 된대로.
Joakim Elofsson

2
@JoakimElofsson 링크에 언급되어 있지만 오해를 피하기 위해 답변을 수정하겠습니다. 정정하십시오.
damphat

3
받아 들여진 대답이 이것도 가리키는 것이 중요합니다. 잠시 동안 나는 생각했습니다./ == source == .
Daniel F

90

'type'명령을 아는 것이 유용합니다.

> type source
source is a shell builtin

무언가 내장 된 쉘일 때마다해야 할 시간 man bash입니다.


1
읽을 때 항상 새로운 것을 알고 있어야합니다 man)

19
당신은 또한 사용할 수있는 help {builtin-name}, 즉 help source.
LawrenceC

1
helpzsh에서는 거의 모든 곳에서 작동하지 않습니다. type그렇습니다.
kumarharsh

4
증폭하려면 : bash를 사용하고 있고 아마도 'type'을 통해 알고 있다면 이것이 내장 명령이므로 'help'는 4,184 줄의 ' 남자 bash '텍스트.
Ron Burk

38

. (마침표)는 현재 셸에서 인수로 전달 된 파일 에서 명령 을 실행 하는 bash 셸 내장 명령 입니다. 'source'는 '.'의 동의어입니다.

배쉬 맨 페이지에서 :

. filename [arguments]
source filename [arguments]
       Read  and  execute  commands  from filename in the current shell
       environment and return the exit status of the last command  exe
       cuted from filename.  If filename does not contain a slash, file
       names in PATH are used to find the  directory  containing  file
       name.   The  file  searched  for in PATH need not be executable.
       When bash is  not  in  posix  mode,  the  current  directory  is
       searched  if no file is found in PATH.  If the sourcepath option
       to the shopt builtin command is turned  off,  the  PATH  is  not
       searched.   If any arguments are supplied, they become the posi
       tional parameters when  filename  is  executed.   Otherwise  the
       positional  parameters  are unchanged.  The return status is the
       status of the last command exited within the  script  (0  if  no
       commands  are  executed),  and false if filename is not found or
       cannot be read.

27

'source'는 '.'의 긴 버전입니다. 명령. bash 프롬프트에서 다음을 수행 할 수 있습니다.

source ~/.bashrc

현재 실행중인 bash에 대한 (변경된?) bash 설정을 다시로드하십시오.

짧은 버전은 다음과 같습니다.

. ~/.bashrc

맨 페이지 :

. filename [arguments]
source filename [arguments]
    Read and execute commands from filename in the current shell environment and
    return the exit status of the last command executed from filename. If 
    filename does not contain a slash, file names in PATH are used to find the
    directory containing filename. The file searched for in PATH need not be
    executable. When bash is not in posix mode, the current directory is
    searched if no file is found in PATH. If the sourcepath option to the short
    builtin command is turned off, the PATH is not searched. If any arguments
    are supplied, they become the positional parameters when filename is
    executed. Otherwise the positional parameters are unchanged. The return 
    status is the status of the last command exited within the script (0 if no
    commands are executed), and false if filename is not found or cannot be
    read. 

이것이 정답입니다.
Peter Mortensen

25

source명령은 현재 쉘 환경 에서 제공된 스크립트 (실행 가능 권한은 필수아님 ) 를 실행하는 반면 , 제공된 실행 스크립트는 쉘 에서 실행합니다 ../

sourcecommand는 동의어를 갖습니다 . filename.

더 명확하게하려면 다음 스크립트를 살펴보고 별칭을 설정하십시오.

make_alias

#! /bin/bash

alias myproject='cd ~/Documents/Projects/2015/NewProject'

이제이 스크립트를 실행할 두 가지 선택이 있습니다. 그러나 옵션 이 하나만 있으면 이 두 옵션 중에서 현재 쉘에 대해 원하는 별명을 작성할 수 있습니다.

옵션 1: ./make_alias

스크립트를 먼저 실행 가능하게 만드십시오.

chmod +x make_alias

실행

./make_alias

검증

alias

산출

**nothing**

으악! 별명이 새 쉘과 함께 사라졌습니다.

두 번째 옵션으로 갑시다.

옵션 2 : source make_alias

실행

source make_alias

또는

. make_alias

검증

alias

산출

alias myproject='cd ~/Documents/Projects/2015/NewProject'

그래 Alias가 설정되었습니다.


10

확실하지 않은 경우 가장 좋은 방법은 다음 info명령을 사용하는 것입니다 .

[root@abc ~]# info source

BASH BUILTIN COMMANDS
       Unless otherwise noted, each builtin command documented in this section
       as accepting options preceded by - accepts -- to signify the end of the
       options.   The  :, true, false, and test builtins do not accept options
       and do not treat -- specially.  The exit, logout, break, continue, let,
       and  shift builtins accept and process arguments beginning with - with-
       out requiring --.  Other builtins that accept  arguments  but  are  not
       specified  as accepting options interpret arguments beginning with - as
       invalid options and require -- to prevent this interpretation.
       : [arguments]
              No effect; the command does nothing beyond  expanding  arguments
              and  performing any specified redirections.  A zero exit code is
              returned.

        .  filename [arguments]
       source filename [arguments]
              Read and execute commands from filename  in  the  current  shell
              environment  and return the exit status of the last command exe-
              cuted from filename.  If filename does not contain a slash, file
              names  in  PATH  are used to find the directory containing file-
              name.  The file searched for in PATH  need  not  be  executable.
              When  bash  is  not  in  posix  mode,  the  current directory is
              searched if no file is found in PATH.  If the sourcepath  option
              to  the  shopt  builtin  command  is turned off, the PATH is not
              searched.  If any arguments are supplied, they become the  posi-
              tional  parameters  when  filename  is  executed.  Otherwise the
              positional parameters are unchanged.  The return status  is  the
              status  of  the  last  command exited within the script (0 if no
              commands are executed), and false if filename is  not  found  or
              cannot be read.

RTFM 이상의 것을 제공 할 수 있습니까?
피터 Mortensen

5

쉘에 "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.

4

Linux 문서 프로젝트, Advanced Bash 스크립팅 안내서,
15 장- 내부 명령 및 내장에서 :

소스 , . (점 명령) :
이 명령은 명령 행에서 호출 될 때 스크립트를 실행합니다. 스크립트 내에서 소스 파일 이름은 파일 file-name을로드합니다. 파일을 소싱 (dot-command)하면 코드가 스크립트에 추가되어 스크립트에 추가됩니다 (C 프로그램의 #include 지시문과 동일). 최종 결과는 "소스 화 된"코드 줄이 스크립트 본문에 실제로 존재하는 것과 같습니다. 여러 스크립트가 공통 데이터 파일 또는 함수 라이브러리를 사용하는 경우에 유용합니다.
소스 파일 자체가 실행 가능한 스크립트 인 경우 실행 된 다음 해당 스크립트를 호출 한 스크립트로 제어를 리턴합니다. 소스 실행 스크립트는이 목적으로 리턴을 사용할 수 있습니다.

따라서 C 프로그래밍 언어에 익숙한 사람들에게는 파일 소싱이 #include지시문 과 유사한 효과를냅니다 .

또한 다음과 같이 소스 파일에 위치 인수를 전달할 수 있습니다.

$ source $filename $arg1 arg2

이 답변은 이전 9 답변과 어떻게 다릅니 까?
Stephen Rauch

2
이전에 언급되지 않은 다른 정보 소스와 추가 정보를 추가합니다.
Alexandro de Oliveira

나는 그것이 source인수를 사용하거나 사용할 수 있다는 것을 몰랐다 return.

2

멋진 명령 임에도 불구하고 source그 속기의 둘도 둘 이상의 파일을 소스 하지 않을 .것입니다.

source *.sh

또는

. script1.sh script2.sh

수 없습니다 작동합니다.

for루프를 사용하여 되돌릴 수 있지만 실행 파일을 여러 번 발행하여 여러 명령을 작성하거나 발행합니다.

결론 : source여러 파일을 입력으로 사용하지 않습니다. 논쟁은 하나 여야합니다.

IMHO를 짜증나게합니다.


0

소스를 사용하면 다른 파일의 변수 또는 함수를 스크립트로 전달하고 다시 쓰지 않고도 사용할 수 있습니다.

FI :

#!/bin/bash

source /etc/environment

source /myscripts/jetty-common/config/jetty-functions.sh

건배

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