帮助了解运行命令中的bashing脚本

时间:2018-12-19 16:24:16

标签: bash azure variables azure-cli

我继承了一些我想理解的代码。它是azure cli命令和linux bash脚本的组合

Out[x]

我希望指针理解

#!/bin/bash -e

info "Installing Dependencies"

declare -a PIDS=()

# "Deploying into the VMs"
for i in $(seq 1 $NODES_NUM); do
    THIS_VM_NAME="${VM_NAME}${i}"

    # "Check if the VM exists"
    if `az vm list -o table | grep -q "${THIS_VM_NAME}"`; then
        info "Deploying: Installing deps and Pairty, Executing for ${THIS_VM_NAME}"

        PIDS[${i}]=$!

        az vm run-command invoke --name ${THIS_VM_NAME} \
            --command-id RunShellScript \
            --resource-group ${RSC_GRP_NAME} \
            --query "output[].message | join('\n\n', @)" \
            --scripts @${TEMPLATES}/user-data.sh &

        PIDS[${i}]=$!
    fi
done

# wait for all pids
info "Waiting for Completion.."
for pid in ${PIDS[*]}; do
    wait $pid
done

有效。

  • 我看不到变量已导入到脚本中
  • 该文件位于另一个文件夹中,并且可以正常工作吗?
  • 我还要感谢@${TEMPLATES}/user-data.sh & PIDS[${i}]=$! 上的指针,这是否意味着进程可以并发运行?

1 个答案:

答案 0 :(得分:0)

通过测试,我也发生了同样的事情。但是两个星期前,它运作良好。我会给你看一些东西:

最后

enter image description here enter image description here

命令和输出正常。而且在后端,脚本应该像上面一样。

现在

enter image description here enter image description here

您可以看到该命令未在后端设置参数。但是,如果只使用带有参数的shell命令,它也可以很好地工作。

enter image description here enter image description here

根据测试,也许几天以来CLI发生了一些不好的事情。您可以等待连续几天,然后再次运行CLI命令。

  

该文件位于另一个文件夹中,并且可以正常工作吗?

如果您是将shell脚本放在另一个文件夹中,那么如果CLI命令照常运行,它也将很好地工作。

  

我还要感谢PIDS上的指针,这是否意味着   进程可以并发运行吗?

有些事情要注意。 CLI命令在Linux中作为进程运行,因此它可以在后端同时运行。但是run-command只是通过VM的代理程序运行Shell脚本,并且一次只能运行一个脚本。您可以获取详细信息here

此外,您可以使用VM扩展名通过“运行命令”来执行您想做的事情,并且它更加可用。

希望这会对您有所帮助。