Shell 脚本执行失败的原因非常多,不能一概而论,下面按常见场景 + 示例给你系统性梳理,你可以对照排查。
bash: ./test.sh: Permission denied
脚本没有执行权限。
chmod +x test.sh
./test.sh
或者用解释器直接执行(无需 +x):
bash test.sh
#!/bin/bash
但系统没有 /bin/bash
which bash
#!/usr/bin/env bash
bash: ./test.sh: /bin/bash^M: bad interpreter
脚本在 Windows 编辑,带回车符 \r\n
dos2unix test.sh
或:
sed -i 's/\r$//' test.sh
./foo.sh
如果 foo.sh 不在当前目录或 $PATH 中,会失败。
bash foo.sh
if [ $a -eq 1 ]
then
echo ok
缺少 fi
bash -n test.sh # 检查语法
bash -x test.sh # 执行并显示过程
rm -rf $DIR/*
如果 DIR 为空:
rm -rf /*
rm -rf "${DIR:?DIR is empty}/"
脚本中用到的命令(如 java、python、curl)在执行环境中不存在。
source 方式执行出问题./test.sh
和
source test.sh
后者:
env -i bash test.sh
#!/usr/bin/env bash
set -euo pipefail
作用:
set -e:命令失败立即退出set -u:未定义变量报错set -o pipefail:管道失败也报错你可以贴出:
我可以直接告诉你哪一行为什么会失败。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。