다섯 번째 source.zshrc는 첫 번째 source.zshrc보다 훨씬 더 많은 시간이 걸립니다.

다섯 번째 source.zshrc는 첫 번째 source.zshrc보다 훨씬 더 많은 시간이 걸립니다.

어제 저는 현재 zsh 쉘을 업데이트하기 위해 .zshrc를 얻는 데 필요한 쉘 스크립트를 작성하고 있었습니다.

소스코드 처리를 계속 하다보니 시간이 더 걸리는 것 같아요 source .zshrc.

source또는 문서는 .다음과 같습니다.

. file [ arg ... ]
       Read commands from file and execute them in the current shell environment.

       If file does not contain a slash, or if PATH_DIRS is set, the shell looks in the components of $path to find the directory containing file.  Files in the current  directory
       are  not  read unless `.' appears somewhere in $path.  If a file named `file.zwc' is found, is newer than file, and is the compiled form (created with the zcompile builtin)
       of file, then commands are read from that file instead of file.

       If any arguments arg are given, they become the positional parameters; the old positional parameters are restored when the file is done executing.  However, if no arguments
       are given, the positional parameters remain those of the calling context, and no restoring is done.

       If  file  was  not found the return status is 127; if file was found but contained a syntax error the return status is 126; else the return status is the exit status of the
       last command executed.
source file [ arg ... ]
       Same as `.', except that the current directory is always searched and is always searched first, before directories in $path.

그렇다면 질문은 왜 마지막 소스가 시작보다 훨씬 더 오래 걸리는가 하는 것입니다.

답변1

source(csh에서) 또는 (Bourne 쉘에서)는 쉘을 요청 하고 인수로 전달된 파일에 저장된 쉘 코드를 해석하는 .쉘 내장 명령입니다 .read

실행하는 데 걸리는 시간은 해당 코드를 읽고 해석하는 데 걸리는 시간이므로 모든 것은 해당 코드가 수행하는 작업에 따라 달라집니다.

예를 들어, 이 코드에 다음이 포함된 경우:

var=$var$var

변수의 크기는 실행될 때마다 두 배로 증가하며 $var, 이 코드를 더 많이 실행할수록 복사해야 하는 데이터의 양이 두 배로 늘어나므로 실행하는 데 더 많은 시간이 걸릴 것이라고 쉽게 상상할 수 있습니다. 당신이 그것을 실행하는 시간.

가장 많은 시간이 걸리는 명령을 찾으려면 다음을 수행할 수 있습니다.

PS4='%D{%T.%3.} %N:%i> '; set -o xtrace; source ~/.zshrc

그러면 실행 중인 모든 명령이 밀리초 단위의 정밀도로 타임스탬프와 함께 인쇄됩니다.

관련 정보