Linux 터미널에서 bash 스크립트를 실행할 때 " bash foo.sh
"와 " " ./foo.sh
사이에 차이점이 있습니까 ? 아니면 동일한 기능을 수행하는 두 가지 다른 방법입니까?
답변1
다음 조건이 충족되면 동일할 수 있습니다../foo.sh
- 실행 가능하며,
#!/bin/bash
(또는 이에 상응하는) 로 시작
그렇지 않으면 설명하는 전제 조건( foo.sh
bash 스크립트) 에 따라 ./foo.sh
버전에 사용자의 실행 권한이 없거나 기본 스크립트 인터프리터 대신 /bin/sh
스크립트 에 의해 해석되기 때문에 버전이 실패할 가능성이 높습니다./bin/bash
/bin/sh
답변2
Tobys의 답변 외에도 "bash foo.sh"를 호출하기 전에 스크립트에서 기존 shebang bash 인수(예: #!/bin/bash -e)를 확인해야 한다는 점을 지적하고 싶습니다. "bash foo.sh"를 통해 스크립트를 호출하면 shebang의 기존 bash 인수는 신경 쓰지 않습니다.
답변3
여기서는 이미 설명을 했지만 간단히 말해서 bash foo.sh
foo.sh가 bash 쉘에서 실행된다는 의미입니다.
이는 스크립트를 실행하고 스크립트를 변경하는 데 어떤 쉘 스크립트가 사용될지 커널에 알려주는 방법일 뿐입니다.