소스 vs. 왜 다른 행동?


17

최근에 배웠습니다.

. ./.a.a./.a.a동일합니다.

그러나 시도 source source .a.a하면 오류가 발생합니다. .Bash 별칭 인 IMO 가 source다르게 동작해서는 안되므로 무엇을 놓치고 있습니까?

보너스 는 아니지만 왜 . .괜찮 source source습니까?


8
예를 들어 더 명확한 이름을 선택했을 수 있습니다. :). 어떤 경우, 어떤 당신에게 그 아이디어를 준 . script./script같은 일입니까? 그들은 가장 확실하지 않습니다 . 또한 .의 별칭이 아닙니다 source. 그것은 다른 길입니다. .표준이며 source의 별칭입니다 ..
terdon

2
쉘 스크립트를 보면서 시간을 보낸 후에는 .명령에 익숙해 지지만 스크립트에서 source볼 때 source somefile그 문장의 기능을 즉시 알 수 있지만 . somefile 그 기능이 무엇인지 분명하지는 않습니다. 당신은 쉽게 . 문자를 놓칠 수 있습니다
the_velour_fog

보너스는 왜입니까. . 소스 소스가 아닌 동안 OK? - 오류 메시지가 얼마나 멀리에있는 bash: .: .: is a directory에가 . .설명 확인을 요구합니다.
카운터 모드

@ terdon-절대적으로 맞습니다. 원래의 예는 . ./.a.a .정직해야했습니다. : -DA 퀴즈, 당신이 원한다면. :-) 연결된 질문은 굉장합니다, 많은 감사합니다. 나에게 그 아이디어를 준 것은 :이 방법으로 파일을 실행하는 데 아무런 차이가 없다는 사실과 내가 어딘가에서 읽은 사실 .은의 별칭입니다 source. :-)
LAFK는 Monica Reinstate Monica가

답변:


27

당신은 대체 할 수 없습니다 .source사방; 만약

. ./.a.a

작동하면 첫 번째 .(적어도 Bash)를 바꿀 수 있습니다 .

source ./.a.a

두 번째는 .당신이 그것을 대체 할 수 없습니다, 현재 디렉토리를 나타냅니다 source(특히하지 ./source당신이 한 것처럼).

source source

source현재 디렉토리에 호출 된 파일 이 있고 현재 쉘에 의미있는 것을 포함 하면 괜찮습니다 . 어떻게 . .될지 모르겠다 ...

또한, . ./.a.a./.a.a상기 제 폼 실행 동일하지 않은 .a.a별도의 쉘이다. 소싱 ( '.'또는 'source')과 bash에서 파일 실행의 차이점무엇입니까?를 참조하십시오 . 자세한 내용은.


9

source다음과 같이 사용되는 쉘 키워드입니다. sourcefile여기서 file유효한 쉘 명령을 포함합니다. 이 쉘 명령은 명령 행에서 입력 한 것처럼 현재 쉘에서 실행됩니다. 이제 .file정확히 똑같습니다.

그 외에는 ( 이 디렉토리의 "") 또는 (와 동일한 ) ."현재 작업 디렉토리"를 의미합니다 ../xyzxyza/b/./c/./da/b/c/d

그 외에도 .파일 이름 .foobar에서 "숨겨진"파일을 나타내는 (실제로 ...는 아님) 또는 foobar.pdf접미사 (여기서는 .pdf) 로 파일 형식을 나타내는 것과 같은 규칙에 의해서만 의미가 있습니다 .

이러한 다른 의미는 서로 바뀔 수 없습니다.


8
.구식이 아닙니다. source이식 가능한 POSIX 정의 파일 과 달리 파일을 소싱하는 것과는 다릅니다 . source별명은 쉘 특정하고 (예를 들면 하나 없을 수 있습니다 dash) 또는 표준에서 다르게 행동 ..
terdon

@terdon 덕분에 Wiki 는 명령이 처음 나타난 C 쉘에서 점 (.)으로 소스를 사용할 수 없다고 말합니다.
Noam Manos

1
아마도 @NoamManos이지만 C-shell은 POSIX가 아니므로 매우 다르게 동작 할 수 있습니다.
terdon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.