Ubuntu 18.04重启后Bash脚本无法直接运行,bash执行正常求助
问题原因及解决办法
问题背景
系统:Ubuntu 18.04.5 LTS
已通过chmod +x test赋予执行权限的Bash脚本test,出现以下异常:
- 直接执行无任何输出,尝试写入文件的版本也无法生成目标文件;
- 命令行执行
bash test可正常运行; - 脚本通过crontab执行时同样失效;
- 当前
$SHELL为/bin/bash。
脚本示例:
#! /bin/bash echo "hello world"
核心原因
- 脚本命名冲突:
test是Bash内置命令,同时系统中也存在/usr/bin/test可执行文件。直接输入test时,系统会优先调用内置命令或PATH中的系统test,而非当前目录下的自定义脚本,导致脚本未被执行。 - crontab执行上下文限制:
- crontab默认工作目录为用户家目录,且默认
PATH仅包含/usr/bin:/bin,不会自动识别当前脚本所在路径; - 若crontab任务仅填写
test,系统会执行系统自带的test命令,而非你的自定义脚本;即使填写脚本文件名,未用绝对路径时crontab会在用户家目录寻找,找不到则执行失败。
- crontab默认工作目录为用户家目录,且默认
解决办法
1. 命令行执行脚本的正确方式
使用相对路径或绝对路径调用脚本,避免触发系统命令:
# 当前目录下执行 ./test # 任意目录下执行(替换为你的脚本实际绝对路径) /home/your_username/test
2. 修复crontab任务
执行crontab -e编辑定时任务,采用以下任一方式:
- 使用脚本绝对路径(推荐):
# 示例:每分钟执行一次脚本,输出和错误写入日志文件 * * * * * /home/your_username/test >> /home/your_username/test_output.log 2>&1 - 先切换到脚本目录再执行:
# 示例:切换到脚本所在目录,执行脚本并记录日志 * * * * * cd /home/your_username/scripts && ./test >> test_output.log 2>&1
3. 可选:避免命名冲突
将脚本重命名为非系统命令的名称(如test_script),之后可直接通过./test_script(或绝对路径)执行,无需担心与系统命令冲突。
内容的提问来源于stack exchange,提问作者mark-hahn
相关产品推荐
相关产品推荐

