【问题标题】:bash: command not found issue ( sshpass )bash:找不到命令问题( sshpass )
【发布时间】:2018-05-08 22:24:31
【问题描述】:

我有machine Amachine B。从我的local machine X,我想运行一个 bash 脚本,它将连接到 Machine A,然后连接到 Machine B,以检查 Machine B 上的包版本。

现在,我在Machine B 上安装了两个或更多软件包。

单包版本检查:

sshpass -p 'Password' ssh admin@A.A.A.A -p 30025  "sshpass -p 'Password' ssh B.B.B.B "dpkg -s env.ns | grep -E 'Version|Package' | tr '\n' ',' |sed 's/,$/\n/'""

结果:

Package: env.ns,Version: 51.0.0n

多包检查:

sshpass -p 'Password' ssh admin@A.A.A.A -p 30025  "sshpass -p 'Password' ssh B.B.B.B "dpkg -s env.ns | grep -E 'Version|Package' | tr '\n' ',' |sed 's/,$/\n/' && dpkg -s agent.ns | grep -E 'Version|Package' | tr '\n' ',' |sed 's/,$/\n/'""

结果:

Package: env.ns,Version: 51.0.0n
-bash: dpkg: command not found

我无法获得第二个的软件包版本。使用sshpass,我们可以传递多个命令在主机上运行吗?

预期结果:

Package: env.ns,Version: 51.0.0
Package: agent.ns,Version: 51.0.0

【问题讨论】:

  • 设置私钥认证,使用ssh -J admin@A.A.A.A:30025 B.B.B.B 'dpkg ...'
  • 您在 both 命令中存在引用嵌套问题。您需要转义每个命令中的内部双引号对,以使它们具有您想要的含义。我不确定这是否会完全解决您的问题,但这肯定是朝着正确方向迈出的一步。

标签: bash shell sshpass


【解决方案1】:

尝试使用';' 而不是'&&'

sshpass -p 'Password' ssh admin@A.A.A.A -p 30025  "sshpass -p 'Password' ssh B.B.B.B "dpkg -s env.ns | grep -E 'Version|Package' | tr '\n' ',' |sed 's/,$/\n/' ; dpkg -s agent.ns | grep -E 'Version|Package' | tr '\n' ',' |sed 's/,$/\n/'""

【讨论】:

    【解决方案2】:

    && 后面的所有内容都作为单独的命令执行。 也许您可以尝试大括号扩展:在大括号中添加两个命令,例如 {command1, command2}(不确定这是否可行)

    如果大括号扩展不起作用,您将不得不重复该命令。

    【讨论】:

      猜你喜欢
      • 2016-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-22
      • 2016-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多