vim/nano와 같은 편집기로 파일을 작성하는 것과 쉘에서 출력 리디렉션을 사용하여 파일을 작성하는 것의 차이점은 무엇입니까?

vim/nano와 같은 편집기로 파일을 작성하는 것과 쉘에서 출력 리디렉션을 사용하여 파일을 작성하는 것의 차이점은 무엇입니까?

나는 macOS를 다음과 같이 사용하고 있습니다.한모금활성화되었습니다. 그리고 수정 또는 생성 후 SIP를 사용하면 스크립트가 왜 그렇게 느리게 실행되는지 파악 중입니다.

그리고 vim이나 nano 같은 편집기로 스크립트를 수정하고 로 실행하면 ./script.bash각 수정 후 처음으로 스크립트를 완료하는 데 약 1초가 걸린다는 사실을 발견했습니다.

예를 들어. script.bash가 다음과 같은 경우:

#!/bin/bash
echo 1

그리고 로 아래로 변경합니다 vim. 실행하는 데 시간이 10배 정도 더 걸립니다.

#!/bin/bash
echo 1
echo 2
bash-3.2$ time ./script.bash # First time after modification by vim
1
2

real    0m0.884s
user    0m0.001s
sys 0m0.002s
bash-3.2$ time ./script.bash # Second time after modification by vim
1
2

real    0m0.003s
user    0m0.001s
sys 0m0.002s

현재 와 같은 일부 명령의 출력 리디렉션으로 파일을 추가하고 echo "echo 3" >> script.bash여전히 으로 스크립트를 호출 하면 ./script.bash지연이 사라집니다.

bash-3.2$ echo "echo 3" >> script.bash
bash-3.2$ time ./script.bash # First time after modification by echo
1
2
3

real    0m0.004s
user    0m0.001s
sys 0m0.002s
bash-3.2$ time ./script.bash # Second time after modification by echo
1
2
3

real    0m0.002s
user    0m0.001s
sys 0m0.001s

그렇다면 파일을 작성하는 두 가지 방법의 차이점은 무엇입니까? 지연이 발생하는 이유는 다음과 같습니다.한모금활성화되었나요?

답변1

나는 찾았다이 기사나는 당신의 문제를 설명한다고 생각합니다.

Apple은 공증을 도입하여 개발자에게 불편을 끼치는 것을 제외하고 사용자가 처음으로 새 실행 파일을 실행할 때 Apple이 서버의 응답을 기다리는 동안 실행을 지연시키므로 사용자 경험이 저하됩니다. 이 확인 작업은 거의 1초 정도 걸립니다.

이것은 단지 인터넷에서 다운로드한 파일에만 적용되는 것이 아니며, Finder를 통해 파일을 실행할 때만 적용되는 것도 아닙니다. 이것이 전부입니다. 그래서 한 줄의 쉘 스크립트를 작성하고 터미널에서 실행하더라도 지연이 발생합니다!

공증 확인의 경우 결과가 캐시되므로 두 번째 호출이 빨라야 하지만 개발자라면 정기적으로 스크립트와 바이너리를 업데이트하여 새로운 확인을 트리거할 수 있습니다(캐싱은 inode를 기반으로 하는 것으로 나타나므로 업데이트 -내부 저장을 사용하면 새로운 검사가 실행되지 않을 수 있음) 또는 스크립트를 동적으로 생성하고 실행하는 작업 흐름이 있을 수 있습니다. 이 작업 흐름은 이제 Apple 서버의 응답성에 따라 달라집니다.

편집기를 통해 파일을 수정하면 inode가 수정되어 다시 확인되지만 리디렉션으로 추가하면 그렇지 않은 것 같습니다.

관련 정보