【问题标题】:Bash script triggered remotely via ssh not working properly通过 ssh 远程触发的 Bash 脚本无法正常工作
【发布时间】:2021-04-16 15:39:39
【问题描述】:

我在远程机器上有一个脚本,其中包含如下 for 循环:

#!/bin/bash -eux

# execute build.sh in each component
for f in workspace/**/**/build.sh ; do
  echo $f
  REPO=${f%*build.sh}
  echo $REPO
  git -C ./$REPO checkout master
  git -C ./$REPO pull origin master
  $f
done

此脚本正在查找所有包含 build.sh 文件的存储库,提取最新更改并构建它们。

当我在机器上执行脚本时效果很好,但是当我尝试远程触发这个脚本时,for 循环只运行一次,我看到它返回一个实际上根本没有 build.sh 的 repo:

$ ssh devops "~/build.sh"
+ for f in workspace/**/**/build.sh
+ echo 'workspace/**/**/build.sh'
+ REPO='workspace/**/**/'
+ echo workspace/core/auth/
workspace/**/**/build.sh
workspace/core/auth/
+ git -C ./workspace/core/auth/ checkout master
Already on 'master'
Your branch is up to date with 'origin/master'.
+ git -C ./workspace/core/auth/ pull origin master
From https://gitlabe.com/workspace/core/auth
 * branch            master     -> FETCH_HEAD
Already up to date.
+ 'workspace/**/**/build.sh'
/home/devops/build.sh: line 10: workspace/**/**/build.sh: No such file or directory

我试图制作一个单行的 for 循环并使用 ssh,但这也没有用。我该如何解决这个问题?

【问题讨论】:

    标签: linux bash shell for-loop ssh


    【解决方案1】:

    您需要在远程计算机上启用 globbing。将此添加到脚本的开头:

    shopt -s globstar
    

    另见this thread

    【讨论】:

      猜你喜欢
      • 2011-03-07
      • 1970-01-01
      • 2011-06-13
      • 1970-01-01
      • 1970-01-01
      • 2015-02-14
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多