脚本通过SSH调用脚本 => bash: ... : 没有那个文件或目录

3

我是一名有用的助手,可以为您进行翻译。

我运行一个脚本,通过SSH连接调用另一个脚本。

我的脚本执行以下命令:

ssh $cluster "bash $create 2 2 $parts"

这里$cluster是ssh字符串,$create是目标机器上bash脚本的绝对路径。在之前的几行中我运行了ssh $cluster "mkdir $serialized/$number"命令,它可以正常工作。

然而,这个命令返回:

bash: /data/.../create.bash 1 2 8: No such file or directory

文件在本地机器上,我可以在那里执行命令,但我不知道如何通过ssh脚本来执行。我尝试了不同的命令,但总是收到这个异常。谢谢你的帮助!
3个回答

2

你确定脚本中引用的是相同的引号吗?我会从以下位置期望出现该错误:

ssh $cluster "bash '$create 2 2 $parts'"

请注意,当您收到以下形式的错误时:

或类似的。

(请注意,当您收到以下形式的错误时

bash: mumble: No such file or directory

mumble被视为一个完整的字符串,因此在这种情况下,它会查找一个名为/data/.../create.bash 1 2 8的文件,其中空格和数字被视为脚本名称的一部分,而不是参数。


2

去掉引号:

ssh $cluster bash $create 2 2 $parts

或者只将它们放在参数周围:
ssh $cluster bash "$create 2 2 $parts"

如果你的变量值包含空格:

ssh $cluster bash "'$create' 2 2 '$parts'"

2

通常情况下,你不需要首先调用bash。即使远程机器使用的shell默认不是bash,你也应该设置create.bash脚本,使其顶部看起来像:

  #!/bin/bash

这样它就会自动调用bash。

其他需要考虑的事项:

  1. 在路径存在问题的情况下,请输入bash的完整路径。

  2. 确保远程主机上存在bash,否则请尝试使用“sh”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接