Docker中Ubuntu Shell下编译二进制脚本无法直接运行求助
问题:shc编译的Shell二进制文件直接执行无输出
项目背景
- 项目用于测试Dockerfile,通过shc包编译Shell脚本,并将二进制文件所在目录添加至PATH环境变量
问题现象
- 执行
which test可获取二进制文件的正确路径 echo $PATH显示该二进制文件所在目录已在PATH中- 直接运行
test.sh脚本可正常输出 - 进入二进制文件所在目录执行
./test可正常输出 - 直接以命令形式执行
test时,无输出、无错误,直接跳至下一行
现象总结
root@1129847:/somedir# test # 无任何输出 root@q0w9e8q:/somedir# test.sh # 正常显示脚本输出 root@xxx:/somedir# echo $PATH # 输出包含二进制文件所在目录的路径
原因分析
test是Shell内置命令,当直接输入test时,Shell会优先执行内置的test命令(用于条件判断,无参数时直接返回退出码0,不会产生任何输出),不会去PATH里查找同名的二进制文件。
解决方案
- 重命名二进制文件:将编译生成的
test改成其他名称(比如my-test),之后直接执行my-test即可调用编译后的二进制文件。 - 使用绝对路径执行:直接输入二进制文件的完整路径,比如
/path/to/your/test,绕过Shell内置命令的优先级。 - 强制调用外部命令:使用
command test命令,该命令会强制Shell去PATH中查找外部命令,而不使用内置命令。
内容的提问来源于stack exchange,提问作者Nathan Perkins
相关产品推荐
相关产品推荐

