【问题标题】:exit code from ssh commandssh 命令的退出代码
【发布时间】:2016-04-19 18:49:08
【问题描述】:

我正在尝试从该脚本中检索代码返回:

#!/bin/bash
echo "CM  1"
ssh -i key/keyId.ppk user@X.X.X.X "
grep blabla ddd
if [ ! $? -eq 0 ]; then exit 1; fi
"
echo $?

但最后一个命令 echo $? 返回 0 而不是 1。

如果尝试单独运行(而不是作为脚本):

  • ssh 命令:ssh -i key/keyId.ppk user@X.X.X.X
  • grep blabla ddd => 我收到消息“grep: ddd: No such file or directory”
  • 那么:如果 [ !美元? -当量0];然后退出1;菲
  • 那么:回显 $? => 它按预期返回 1

您知道为什么它在我的脚本中不起作用吗?

谢谢

【问题讨论】:

  • 什么是“不返回任何东西”?你用的是什么版本?它对我来说很好。
  • 使用ssh-t背后的原因是什么?
  • @Rany Albeg Wein:-t 没有特殊原因
  • @Jakuje : GNU bash,版本 4.1.17(0)-release (i686-pc-cygwin) 我已经编辑了我的帖子,你说得对,它适用于我的第一个版本,但在当前版本中版本对我不起作用

标签: bash unix ssh exit-code


【解决方案1】:

这段代码

ssh -i key/keyId.ppk user@X.X.X.X "
grep blabla ddd
if [ ! $? -eq 0 ]; then exit 1; fi
"

在你的shell中而不是在远程shell中评估$?,因为$没有在单引号中转义。您应该逃避它以达到所需的行为。一次是为了避免在本地 shell 中进行评估,第二次是为了避免在将其传递给远程端的 bash 时进行评估。或者更确切地说,将命令放在单引号中:

ssh -i key/keyId.ppk user@X.X.X.X '
grep blabla ddd
if [ ! $? -eq 0 ]; then exit 1; fi
'

【讨论】:

  • 此外,将退出状态与 0 进行比较是 if 命令已经完成的工作!您不需要使用[$?if ! grep blabla ddd 是等价的。
  • @WumpusQ.Wumbley 是的。但我不想破坏他的算法:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-12
  • 1970-01-01
  • 1970-01-01
  • 2016-10-08
  • 1970-01-01
  • 2013-08-26
相关资源
最近更新 更多