각 명령에 대한 전체 경로가 포함된 CD

각 명령에 대한 전체 경로가 포함된 CD

쉘 스크립트에서 먼저 디렉토리에 CD를 넣은 다음 명령을 실행하거나 전체 경로를 작성하는 것이 더 빠르거나 더 나은 것으로 간주됩니까? 예: 먼저 쓴 cd /directory1/다음 을 쓰는 mkdir subdirectory/것이 좋습니다 mkdir /directory1/subdirectory/.

디렉터리에서 일부 명령을 실행해야 하는 경우(위 예에서 여러 하위 디렉터리 생성) 대답이 바뀌나요?

mkdir /directory1/subdirectory/그것이 실제로 이루어지고 있다고 말할 때 cd /directory1/, 아니면 mkdir subdirectory/이루어지지 않고 있다고 말할 때 ?

mkdir은 단지 예일 뿐이지만 이 질문은 많은 유사한 명령에 적용될 수 있습니다.

답변1

이것은 실제로 당신이 결정할 문제입니다. 이 결정에 영향을 미칠 수 있는 요소는 미학적으로 만족스럽거나 읽기 쉬운지 여부일 수 있습니다. 실행 속도 측면에서는 큰 차이가 없습니다.

기존 디렉터리 아래에 세 개의 하위 디렉터리를 만들 수 있습니다 /path/to/dir.

mkdir /path/to/dir/a \
      /path/to/dir/b \
      /path/to/dir/b
( cd /path/to/dir && mkdir a b c )

cd(서브쉘을 사용하면 원래 작업 디렉토리로 돌아갈 수 있습니다 )

중괄호 확장을 알고 있는 쉘 사용( cd쉘이 호출하기 전에 중괄호 확장을 확장하므로 이는 본질적으로 위의 -less 버전과 동일 합니다 mkdir):

mkdir /path/to/dir/{a,b,c}

유틸리티 는 C 라이브러리 함수를 mkdir사용할 수 있습니다 . 이 함수는 mkdir()생성하려는 디렉토리를 생성하기 전에 작업 디렉토리 1을 변경하지 않습니다 .

특정 작업 디렉터리에서의 실행에 관심이 있는 스크립트를 실행하면 상황이 달라집니다. 스크립트가 현재 작업 디렉터리 외부의 상대 경로를 사용하여 파일을 찾을 것으로 예상하는 경우 분명히 명령을 실행하기 전에 작업 디렉터리가 올바른지 확인해야 합니다.

( cd directory && thescript )

...스크립트가 직접 수행하지 않는 한.


1 약간의 수정: Linux에서는 다음 명령을 사용합니다.mkdir -p a/b/c ~ 할 것이다, , , 를 호출하는 반면 OpenBSD에서는 mkdir("a"), , . 만 호출합니다 . Linux에서는 추가 개별 디렉토리를 생성 하면 간단히 .chdir("a")mkdir("b")chdir("b")mkdir("c")mkdir("a")mkdir("a/b")mkdir("a/b/c")a/b/c/dmkdir a/b/c/dmkdir("a/b/c/d")

따라서 Linux에서는 mkdir -p디렉토리를 생성할 때 각 중간 경로가 실제로 내부적으로 "한 번 실행"됩니다(no를 사용하면 이 작업이 수행되지 않습니다).cdmkdir-p

-pmkdir이 유틸리티 에는 누락된 중간 디렉터리를 생성하도록 하는 플래그가 있는데 , 분명히 BSD와 Linux 개발자는 이 작업을 약간 다르게 수행합니다.

답변2

디렉터리에서 작업을 수행 chdir한 다음 짧은 이름을 사용하여 해당 디렉터리의 파일에 액세스하는 것이 파일의 절대 경로 이름을 사용하는 것보다 훨씬 빠릅니다.

반면에 특정 디렉토리에 있고 다른 디렉토리에 있는 많은 파일 이름 인수를 사용하여 명령을 호출하려는 경우 절대 경로 이름을 사용하는 것이 더 안전하고 이해하기 쉽습니다.

참고: 더 긴 디렉터리 경로( )를 만들고 a/b/c/...명령이 준비되었을 때 해당 목록의 모든 디렉터리가 존재하도록 허용하려면 디렉터리를 만들고 chdir을 만든 후 다음 디렉터리를 진행하는 것이 좋습니다. . 이렇게 하면 경로가 PATH_MAX.

관련 정보