运行这样的脚本文件有什么区别:
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
可以使用此方法。