다음과 같은 스크립트 파일을 실행하는 것의 차이점은 무엇입니까?
sh myfile.sh
아니면 이거:
./myfile.sh
나는 그것들이 똑같은 것이라고 생각했지만 다음 예와 같이 때때로 그렇지 않다는 것을 알았습니다.
root@kali:~/Documents# sh sweep-ips.sh
ips range:
ping: 10.11.1.{0..24}: Name or service not known
root@kali:~/Documents# ./sweep-ips.sh
ips range:
64 bytes from 10.11.1.5: icmp_seq=1 ttl=128 time=242 ms
64 bytes from 10.11.1.8: icmp_seq=1 ttl=64 time=249 ms
64 bytes from 10.11.1.22: icmp_seq=1 ttl=255 time=249 ms
64 bytes from 10.11.1.24: icmp_seq=1 ttl=64 time=241 ms
스크립트:
#!/bin/bash
echo "ips range"
for ip in 10.11.1.{0..24}
do
ping -c 1 ${ip} | grep "time="
done
답변1
./script.sh
스크립트는 바이너리와 동일한 방식으로 실행됩니다. #!
바이너리가 아닌 스크립트인 경우 인터프리터를 선택하세요.
bash script.sh
bash
스크립트를 실행하기 위해 인터프리터로 호출됩니다 .
둘 다 거의 동일해 보이지만 차이점이 있습니다.
한 가지 주요 차이점은 작동 script.sh
하려면 실행 가능해야 한다는 것입니다 ./script.sh
. 즉, 권한이 있는 파일은 644
이런 방식으로 실행할 수 없습니다. 반면에 bash script.sh
미리 정의된 인터프리터는 /bin/bash
이미 실행 가능합니다. 따라서 권한이 있는 파일은 644
이 방법을 사용할 수 있습니다.