./script와 bash 스크립트 사이에 차이점이 있습니까? [복사]

./script와 bash 스크립트 사이에 차이점이 있습니까? [복사]

다음으로 시작하는 쉘 스크립트 파일이 주어지면

#!/bin/bash

# (bash script here),

수정했는데 chmod +x실행과 명령줄 사이에 차이가 있나요?./scriptbash script

답변1

그것은 당신에게 달려 있습니다 $PATH. ./script실행할 수 있습니다 /bin/bash script. 경로에 처음 나타나는 것이 무엇 bash script이든 사용되지만 반드시 그런 것은 아니며 다른 버전의 Bash일 수도 있습니다.bash/bin/bash

답변2

두 가지 차이점이 있습니다.

  • ./tryit.shbash가 없으면 실행되지 않지만 /bin, bash tryit.shbash가 있으면 실행되지 않습니다. 왜냐하면 bang 경로( )에 있는 쉘이 사용되기 때문 PATH입니다 ../tryit.sh/bin/bashbash tryit.shbashPATH
  • ./tryit.sh실행 비트가 설정되지 않으면 실행되지 않지만 bash tryit.sh스크립트는 실행됩니다. 비트가 설정되도록 지정하여 이러한 상황을 배제했습니다. 일부 편집자는 이 비트를 지워서 작업 명령이 실패할 수 있습니다.

이 명령은 bash tryit.shbash를 호출하여 실행할 명령이 파일에서 발견되었음을 알려줍니다 tryit.sh. 많은 프로그램(예: awk, perl, python, bash, sh, ksh)이 이런 방식으로 작동합니다. 이것은 명령 파일을 처리하는 Unix 프로그램의 표준 idom입니다.

답변3

약간씩 다르기 때문에 실수하기 쉽습니다.

사용해야 할 것 (두 가지 형태로 모두 작성하겠습니다)

./script
bash ./script

내 추론은 디렉토리를 변경하는 경우 이것이 분명하다는 것입니다.

명시적이지 않은 형식

script
bash script

덜 안전합니다. bash script현재 디렉터리를 검색한 다음 PATH 환경 변수의 디렉터리를 검색하고 scriptPATH 디렉터리에서만 검색합니다. 예상과 다른 명령을 실행하면 파일이 손상될 수 있습니다.

답변4

내 기억이 맞다면 다음 두 가지는정확히 동일합니다:

$ ./script

그리고

$ source script

따라서 ./"명령"을 사용하면 실제로source후드 아래에서 호출됨, 그 자체가 bash내장된 명령입니다. 혹은 다른 해석으로는 서로를 별명으로 부를 수도 있습니다. 하지만: 첫 번째 호출에서는 사용자(사용자)가 소유자 또는 그룹에 대한 +x(=실행 가능) 플래그를 설정해야 합니다 chmod. 그렇지 않으면 "권한 거부" 오류가 발생하지만 source해당 명령으로 실행도 가능합니다.아니요배너 +x. 따라서 bash예를 들어 NTFS 형식의 펜 드라이브에서 스크립트를 실행하려는 경우 후자는 때때로 구세주가 됩니다. 왜냐하면 NTFS 형식의 펜 드라이브 chmod에서는 작동하지 않기 때문입니다.

생각하다이것은 또한 어떤 방식으로든 귀하의 질문에 답할 것입니다.

따라서 bash script및 호출 절차가 source script완전히 동일할 수는 없습니다.bash그 자체다른 스크립트가 그 bash중 하나를 호출하는 동안 스크립트를 인수로 제공하십시오.내장 명령스크립트를 매개변수로 전달하세요. 결과는 (적어도 일상적인 사용에서는) 동일할 가능성이 높지만, 두 경우에서 결과를 얻는 방식은 다소 다릅니다.

관련 정보