You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

RHEL 7中手动可执行patch命令,但脚本执行时提示权限拒绝的问题求助

RHEL 7中手动可执行patch命令,但脚本执行时提示权限拒绝的问题求助

看起来你遇到了个挺闹心的问题——手动跑patch完全正常,放进脚本里就提示权限拒绝,而且脚本权限都开到777了。我来帮你梳理几个可能的原因和排查方向:

  • 检查patch命令的路径匹配问题
    手动执行命令时,你的shell环境变量PATH可能包含了patch的正确绝对路径,但脚本执行时(尤其是用sh直接调用时),PATH可能被重置成了更受限的版本。你可以先手动执行which patch找到它的绝对路径(一般是/usr/bin/patch),然后把脚本里的命令改成绝对路径形式:

    /usr/bin/patch -i <package-name> << EOF
    n
    EOF
    
  • 排查SELinux的限制
    RHEL 7默认SELinux是强制模式,有时候哪怕文件权限是777,它也会限制脚本的执行行为。你可以先临时关闭SELinux测试:

    setenforce 0
    

    如果这时候脚本能正常运行,说明是SELinux上下文的问题。你可以给脚本设置合适的上下文:

    chcon -t bin_t /home/cust/installScript.sh
    

    要是想永久生效,先安装policycoreutils-python包,再执行:

    semanage fcontext -a -t bin_t "/home/cust/installScript.sh"
    restorecon -v /home/cust/installScript.sh
    
  • 确认工作目录与补丁文件权限
    脚本里的<package-name>如果是相对路径,那执行脚本时的当前工作目录可能没有这个文件,或者cust用户对该目录没有读写权限。你可以在脚本开头加上切换工作目录的命令:

    #!/bin/bash
    cd /home/cust || exit 1  # 切换到脚本所在目录,失败则直接退出
    /usr/bin/patch -i <package-name> << EOF
    n
    EOF
    

    另外也要确认补丁文件本身的权限,确保cust用户有读权限:

    ls -l <package-name>
    
  • 检查shell执行环境的差异
    ./installScript.sh执行时,会用脚本开头指定的bash;但用sh /home/cust/installScript.sh时,会调用系统默认的sh(RHEL7里shbash的链接,但会启用POSIX兼容模式,可能导致行为差异)。你可以试试统一用bash /home/cust/installScript.sh执行,看是否解决问题。

备注:内容来源于stack exchange,提问作者TriNguyen

火山引擎 最新活动