bash li.sh与./li.sh的区别及执行安全性咨询
问题解答
先说说权限拒绝的原因
你用./li.sh执行时提示权限拒绝,是因为li.sh没有设置可执行权限。给脚本添加可执行权限后就能正常运行:
chmod +x li.sh
./li.sh 和 bash li.sh 的区别
- 执行逻辑不同
./li.sh:把脚本当作独立的可执行程序运行,系统会先读取脚本开头的#!/bin/env bash(即shebang行),根据这一行指定的解释器来执行脚本。这种方式要求脚本必须有可执行权限。bash li.sh:直接调用bash解释器,把li.sh作为参数传给bash,让bash直接解析并执行脚本里的内容。这种方式不需要脚本有可执行权限,而且会忽略脚本开头的shebang——哪怕你把shebang写成#!/bin/sh,用这个命令还是会用bash来运行。
- 依赖条件不同
./li.sh需要满足两个条件:脚本有可执行权限(chmod +x),且shebang指定的解释器存在于系统中。bash li.sh只需要系统里安装了bash,且你对li.sh有读权限就行。
- 解释器选择灵活性不同
./li.sh完全遵循shebang的指定,比如如果把shebang改成#!/bin/env python,运行时就会用python来执行脚本。bash li.sh强制使用bash解释器,不管shebang写的是什么。
bash li.sh 是否安全?
安全与否取决于脚本本身的内容,和执行方式无关。你的脚本只是读取用户输入的名字然后输出,没有任何危险操作,所以用bash li.sh执行是安全的。
需要注意的是:如果脚本来源不可信(比如从陌生网站下载的脚本),不管用./li.sh还是bash li.sh执行都有风险,因为bash会忠实执行脚本里的所有命令。另外,确保你调用的bash是系统自带的可信程序(比如/bin/bash),避免bash被恶意替换。
内容的提问来源于stack exchange,提问作者Jai
相关产品推荐
相关产品推荐

