存储在变量中的ssh输出以测试其值

时间:2018-04-03 16:20:50

标签: linux bash shell ssh

  remote_file=$(ssh  -t -o LogLevel=QUIET $ip_address 'if [[ -f ~/logs/output.log ]]; then echo exists; else echo nonexistant; fi')
  echo $remote_file
  if [[ "x$remote_file" == "xexists" ]]
  then
     # do some stuff here
  else
     # do some other stuff here
  fi

变量$ remote_file似乎存储了正确的值,因为它在echo语句中输出了正确的值。但是当我测试它的值时,似乎有一些错误,因为测试总是失败并转到else块。我尝试使用set -x进行调试,并注意到测试条件左侧缺失。这可能是什么问题?

== \x\e\x\i\s\t\s ]]

1 个答案:

答案 0 :(得分:2)

正如Charles Duffy所提到的,输出可能包含不明显的空白字符,但您需要在进行比较之前添加到比较中或从变量$remote_file中删除。

请注意,给出的示例并不需要字符串比较。 这可能不是很明显,但是如果你用命令启动ssh,那么当命令完成时,ssh将以与命令本身相同的退出代码退出。因此,您可以将代码简化为:

if ssh -t -o LogLevel=QUIET $ip_address 'test -f ~/logs/output.log'
then
    # do some stuff here
else
    # do some other stuff here
fi