Linux 터미널에서 "bash foo.sh"와 "./foo.sh" 사이에 차이점이 있습니까?

Linux 터미널에서 "bash foo.sh"와 "./foo.sh" 사이에 차이점이 있습니까?

bash foo.shLinux 터미널에서 bash 스크립트를 실행할 때 " "과 " " 사이에 차이점이 있습니까 ./foo.sh? 아니면 동일한 기능을 수행하는 두 가지 다른 방법입니까?

답변1

다음과 같은 경우에는 동일할 수 있습니다../foo.sh

  1. 실행 가능하며,
  2. #!/bin/bash(또는 이에 상응하는) 로 시작

그렇지 않으면 설명하는 전제 조건( foo.shbash 스크립트)이 주어지면 ./foo.sh사용자에 대한 실행 권한이 없거나 ( 기본 스크립트 인터프리터) /bin/sh대신에 의해 해석되기 때문에 버전이 실패할 수 있습니다./bin/bash/bin/sh

답변2

Toby의 답변 외에도 'bash foo.sh'를 호출하기 전에 스크립트에서 기존 shebang bash 매개변수(예: #!/bin/bash -e)를 확인해야 한다는 점을 지적하고 싶습니다. 'bash foo.sh'를 통해 스크립트를 호출하면 shebang의 기존 bash 매개변수는 신경 쓰지 않습니다.

답변3

사람들은 이미 여기서 설명했지만 간단히 말해서 bash foo.shfoo.sh가 bash 쉘에서 실행된다는 의미입니다.

이는 스크립트를 변경하여 스크립트를 실행하는 데 사용할 쉘 스크립트를 커널에 알려주는 방법일 뿐입니다.

관련 정보