屏幕无法执行“Myscript.sh”:没有这样的文件或目录

屏幕无法执行“Myscript.sh”:没有这样的文件或目录

我正在尝试使用 ssh 在屏幕会话中的远程计算机上执行脚本。我使用的命令是:

ssh -t MYSERVER "cd tempdirXYZ; screen Myscript.sh"

当我执行此操作时,我会看到一个屏幕窗口显示几秒钟

cannot exec 'Myscript.sh': No such file or directory

我在远程计算机上使用 bash,并将脚本放置在我的 ~/bin 文件夹中。似乎当我运行上述命令时,我的 bash 文件没有被获取。我什至不确定 bash 是否运行过。

有什么办法可以在不改变命令的情况下完成这项工作吗?远程计算机正在运行 Ubuntu。

答案1

我刚刚意识到你说的是 ~/bin 而不是 /bin。

您需要执行以下命令将目录添加到系统的 PATH 变量中:

export PATH=\$PATH:/home/<username>/bin

这应该允许您运行上面的脚本。如果不是,它可能没有标记为可执行文件,因此运行:

chmod +x ~/bin/Myscript.sh

答案2

如果您无法更改命令,那么您无能为力。该~/.bashrc文件应该在此命令执行期间得到处理。

可能发生的情况是你有一个有条件退出语句在 .bashrc 中,通常就在开头附近,如果检测到当前 shell 是非交互式的(在本例中是非交互式的),它将退出。有时脚本会检查主提示变量 PS1 是否已设置;这是评估交互式 shell 与非交互式 shell 的常见但丑陋的方法。在这种情况下,如果未设置 PS1,则不会解析 .bashrc 的其余部分。

我会检查是否是这种情况 - 使用一些简单的调试技术来查看 .bashrc 是否来源以及它是否提前结束(例如 echo 语句)。您需要修改远程计算机上的 .bashrc 来解决这个问题,这可能会破坏 scp 和 sftp 等其他功能。或者您可以在远程命令中设置 PS1。

如果您可以修改远程命令,则有多种解决方法:

  1. 将运行脚本所需的项目添加到单独的 bash 文件中。直接在您的命令中获取它。
  2. 在命令和远程脚本中使用完整路径。我不知道除了 PATH 之外还有哪些其他环境依赖项,但显然这些依赖项也必须得到解决。
  3. 在远程计算机上填充~/.ssh/environment所有必要的环境变量、别名、函数等。修改 ssh 配置文件/etc/ssh/shhd以确保PermitUserEnvironment启用该设置;否则这行不通。
  4. 将环境变量设置添加到命令中,例如"export PATH=\$PATH:/home/you/bin;..."转义PATH可确保其是我们要添加的远程版本,从而防止在发送命令之前进行扩展。

如果这些都不起作用,请更详细地描述您的限制。

答案3

查看它被识别为什么文件类型

file myscript.sh

设置用户+执行权限

chmod u+x Myscript.sh

相关内容