【问题标题】:"./" does not work in "gcloud compute ssh test --command"“./”在“gcloud compute ssh test --command”中不起作用
【发布时间】:2019-05-23 08:12:55
【问题描述】:

我们在 Google Cloud Ubuntu VM 中有一个主脚本,它可以执行许多其他脚本。

我正在尝试使用命令从 Windows Google Cloud SDK 执行主脚本:

gcloud compute ssh vm --command="./main.sh"

但我得到的只是 -

./main.sh 文件或目录不存在

成功运行的命令main.sh

gcloud compute ssh vm --command="/main.sh" 
gcloud compute ssh vm --command="bash -h /main.sh"

但所有其他脚本都失败并出现相同错误

./script.sh 文件或目录不存在

所有脚本都包含./ 的问题,并且更改所有由开发人员编写的脚本将是一场噩梦。

有什么想法吗?

非常感谢

【问题讨论】:

    标签: google-cloud-platform gcloud


    【解决方案1】:

    因为您的$HOME 中没有main.sh

    你可以跑

    gcloud compute ssh vm --command="cd / && ./main.sh"
    

    【讨论】:

    • 谢谢,Cloud Ace,通过运行这个命令我得到了错误:ERROR: (gcloud.compute.ssh) unrecognized arguments: /gloud ssh 管道有问题?
    • 嗯,ssh VM -- "cd / && ./main.sh"怎么样
    • 在同一台服务器上出错:'ssh' is not recognized as an internal or external command, operable program or batch file.。但是你的命令可以在我安装了 ssh 的电脑上运行。
    • 我明白了。你在哪里运行这个命令? WSL?尝试安装 ssh
    • 但是ssh不支持无密码认证,所以我使用gcloud
    【解决方案2】:

    您可以通过脚本或命令行使用 perl 或 sed 更改那些批处理文件,它们都能够直接编辑文件。 这是一个工作示例,甚至可以简单地在命令行上使用。 将 startdir 替换为脚本源的完整路径。 它假设, - 您的脚本以“.sh”结尾,需要自定义 - 在整个脚本中替换这个表达式是安全的 - 每行只需要进行一次替换

    find startdir -name "*.sh" -print | xargs sed -i -e "s/\.\/main\.sh/\/main\.sh/"
    

    这里的优雅之处在于,xargs 为 sed 命令提供了最大可能找到的文件名数量,以将 sed 执行的数量减少到最小并且不超过命令行的最大长度。

    您甚至可以在 shell 脚本中解决更多问题,如果远程脚本具有不同的名称,您可以添加不同的替换。

    或者,您可以尝试更改运行这些脚本的远程用户/机器的 HOME 目录,以便最后路径对于“./main.sh”是正确的。 但这可能会产生其他影响,我不会真的推荐这个。

    我不确定我是否完全理解您的问题,也许您需要将我的“一个班轮”与另一个建议结合起来,首先将目录更改为“/”,然后将脚本以“./”作为“. "通常不在 PATH 中。然后你必须像这样修改替换:

    find startdir -name "*.sh" -print | xargs sed -i -e "s=\./main\.sh=cd / \&\& \./main\.sh="
    

    【讨论】:

    • 我认为所有其他脚本都是从 main.sh 调用的,因此只需更改工作目录是解决问题的最简单方法。
    • 你可能是对的。对不起,我没有完全理解描述中的问题。但现在他可以选择将您的提案与我的提案结合起来。所以让我们看看他最后说了什么。那么谢谢你的提议。
    猜你喜欢
    • 1970-01-01
    • 2018-03-01
    • 1970-01-01
    • 2019-12-20
    • 2016-07-03
    • 2021-09-08
    • 2020-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多