You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

远程执行shell函数提示“No Such File or Directory”问题求助

排查步骤与解决方法

1. 确认远程主机上文件的真实状态

先直接验证远程主机上目标文件的存在性、权限和内容完整性:

ssh user@host 'ls -ld /usr/local/bin /usr/local/bin/myscript.sh && cat /usr/local/bin/myscript.sh | head -5'

需确认:

  • /usr/local/bin/myscript.sh确实存在
  • user账号对该文件拥有读权限(权限位显示至少包含r)
  • 文件内容无损坏,前几行输出正常

2. 修正远程命令的执行逻辑

当前命令ssh user@host script1.sh softrun存在核心逻辑问题,需根据script1.sh的位置调整:

  • 如果script1.sh在本地主机:远程主机无法直接读取本地脚本,需通过标准输入传递脚本内容并调用函数
    ssh user@host 'bash -s' << 'EOF'
    softrun() {
        source /usr/local/bin/myscript.sh
    }
    softrun
    EOF
    
  • 如果script1.sh已在远程主机(比如user的家目录):需先加载脚本定义函数,再调用函数(直接执行脚本只会定义函数,不会触发执行)
    ssh user@host 'source ~/script1.sh && softrun'
    

3. 排查环境差异导致的异常

远程通过ssh执行命令时,默认是非登录非交互式shell,不会加载~/.bashrc、~/.profile等配置文件。可验证远程环境的基础路径信息:

ssh user@host 'echo $PATH && which bash'

若发现/usr/local/bin不在PATH中(不影响绝对路径调用,但可辅助排查环境一致性),或bash的实际路径与脚本中使用的不一致,需对应调整脚本或命令中的路径。

4. 检查目标脚本的shebang(针对直接调用场景)

如果使用/bin/bash /usr/local/bin/myscript.sh仍报错,检查目标脚本的首行shebang:

ssh user@host 'head -1 /usr/local/bin/myscript.sh'

若shebang为#!/usr/bin/bash但远程主机的bash实际在/bin/bash,需修改shebang为#!/bin/bash,或始终用bash命令强制调用。


内容的提问来源于stack exchange,提问作者aryabhatta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 13:45:31