我需要在远程计算机上执行一些命令,并且已经在本地计算机上编写了这样的脚本。
基本上,我正在docker images
本地计算机上,并希望检查那些图像是否存在于远程服务器中。
我需要将不存在的Docker映像(远程服务器)获取到我的本地计算机。为此,我使用了下面提到的代码,但对我而言不起作用。
#!/bin/sh
declare array=$(docker images)
sshpass -p 'password' ssh -t [email protected] << EOF
declare List=""
while read -r line; do
if [ -z $(docker images -q $line) ]; then
List="$List $line"
else
continue
fi
done <<< "$array"
EOF
我希望List变量位于我的本地计算机中。
谁能帮我解决这个问题?
非常感谢您的帮助。
此致。
一旦远程外壳退出,您在远程外壳中所做的任何操作都不会出现在本地外壳中。您可以做的是让远程shell打印输出并捕获该输出。
顺便说一句,您不能在/bin/sh
脚本中使用数组,但实际上我们在这里不需要数组。
#!/bin/sh
docker images |
sshpass -p 'password' ssh -t [email protected] '
while read -r line; do
# Suction: docker images -q image should return nonzero exit status
# if the named image is missing. We work around that by grepping
# for whether there is any output at all.
docker images -q "$line" | grep -q . || echo "$line"
done'
这只是打印出结果;将其捕获到变量中或将其重定向到文件中以对其进行更多处理,或者仅将其通过管道传递到另一个本地while read -r
循环中。
如果重构此参数,以便对身份验证详细信息进行参数设置,则可以对许多主机运行它。您可以将其另存为可执行脚本,以便可以从任何其他工具中调用它,也可以将其另存为函数(如果您仅在有限的上下文中需要它)。
missing () {
docker images -q |
"$@" 'while read -r line; do
docker images -q "$line" | grep -q . || echo "$line"
done'
}
现在,您可以为一个或多个主机调用它:
missing sshpass -p 'password' ssh -t [email protected] |
xargs -r -n 1 docker pull
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句