我们在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文件或目录不存在
所有脚本都包含./
的问题,更改所有由开发人员编写的脚本将成为噩梦。
有什么想法吗?
非常感谢
答案 0 :(得分:1)
因为您的main.sh
中没有$HOME
。
您可以运行
gcloud compute ssh vm --command="cd / && ./main.sh"
答案 1 :(得分:0)
您可以使用perl或sed更改通过脚本或在命令行上批处理的那些文件,它们都可以直接编辑文件。 这里是一个甚至可以简单地在命令行上使用的示例。 将startdir替换为脚本源的完整路径。 它假设 -您的脚本以“ .sh”结尾,需要自定义 -在整个脚本中替换此表达式是安全的 -该替换每行只能执行1次
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="