当前位置: 首页 > 面试题库 >

远程主机上的Bash命令替换

严易安
2023-03-14
问题内容

我正在尝试运行一个SSH到远程主机上的bash脚本,并停止正在运行的单个docker容器。

#!/usr/bin/env bash

set -e

ssh <machine> <<EOF

container=$(docker ps | awk 'NR==2' | awk '{print $1;}')

docker stop $container

EOF

但是,出现以下错误:

stop.sh: line 4: docker: command not found

当我手动执行此操作(向计算机SSH,运行命令)时,一切都很好,但是当尝试通过脚本执行操作时,我得到了错误。我猜我的命令替换语法不正确,我已经搜索并尝试了各种引号等,但无济于事。

谁能指出我要去哪里了?


问题答案:

在启动您的Heredoc时,请使用<<'EOF'(或<<\EOF-仅引用第一个字符将具有相同的效果),以​​防止对其扩展进行本地评估。

顺便说一句,就我个人而言,我会这样写:

#!/bin/sh -e
ssh "$1" bash <<'EOF'
{ read; read container _; } < <(docker ps)
docker stop "$container"
EOF

第一个read消耗docker ps输出的第一行;第二个消耗输出。第二个仅提取第一列-仅使用bash内置函数。



 类似资料:
  • 问题内容: 我正在Ubuntu上用python编写程序,以在RaspberryPi上执行命令,并与网络连接。 有人可以指导我该怎么做吗? 问题答案: 当然,有几种方法可以做到! 假设您在主机上安装了Raspberry Pi,并且用户名是。 这是运行命令的默认Python库。 您可以使其运行并在远程服务器上执行所需的任何操作。 scrat已在他的回答中提及。如果您不想使用任何第三方库,则绝对应该这样

  • 我只是写了一个测试,应该通过webApp下载pdf文件(是的,我知道,我不应该在selenium上做,但是你知道,订单。) 我需要什么? 对于不同的场景,我必须下载不同的pdf,重命名并放置到自定义目录。所以,我必须处理系统模态窗口。一切都很好,所以测试是在远程主机上运行的,当我点击下载文件时,我处理系统模态窗口(我使用机器人包,它是扩展的机器人类,允许我们在远程主机上使用机器人类),所以我使用机

  • 很好的一天。我有一系列的命令,我想通过一个函数来执行,这样我就可以得到退出代码并相应地执行控制台输出。话虽如此,我这里有两个问题: 1) 我似乎无法将stderr指向/dev/null。 2) 在执行$1之前,不会显示第一条回显行。直到我运行需要一段时间才能处理的命令,比如在硬盘上搜索文件,我才真正注意到这一点。此外,情况显然是这样,因为输出如下所示: 换句话说,stderr显示在“尝试…$2”之

  • 问题内容: 我可以在主机上运行docker命令吗?我安装在Docker容器中,现在可以以某种方式在主机上使用命令(在后台使用Docker容器的aws)吗? 我的情况是这样的:我在生产主机上有数据库备份。现在我有Jenkins cron作业,它将从db容器中获取sql文件,并将其放入服务器文件夹中。现在我还希望jenkins将此备份文件上传到AWS存储上,但是在主机上我没有安装aws,也不想在主机上

  • 是否可以在 Ansible 主机上运行命令? 我的场景是,我想从内部托管的git服务器(并且不能在公司防火墙之外访问)进行结帐。然后我想将结账(tarbated)上传到正式服(托管在外部)。 目前,我正在考虑运行一个脚本,执行签出、tarballs,然后运行部署脚本-但如果我可以将其集成到Ansible中,那将是更好的选择。

  • 机器A和B之间的通信工作良好。我可以运行像或这样的命令,它会给出预期的结果: 我听说过,但还没有尝试过,但据我所知,这并不能解决我的问题。 有什么方法可以直接使用来实现这一点。解决办法可能是使用连接到远程主机,并直接从远程主机使用客户机,但我希望尽可能避免这种解决方案。 在上运行,而不是在本地计算机上运行。