【问题标题】:Using external variable in awk being passed to ssh in bash在 awk 中使用外部变量在 bash 中传递给 ssh
【发布时间】:2015-04-25 09:50:57
【问题描述】:

我正在尝试将外部变量 $time 传递给我通过 ssh 运行到另一台机器的 awk 命令。

time=...
pastusers=`ssh -n $host "last -n 10 | awk -v TIME=$time '{if ($7 > TIME) print $1}'"`

到目前为止我所做的是,我传递给 ssh 的命令自己工作,但通过 ssh 传递它会导致它失败。

我也试过了..

pastusers=`ssh -n $host "last -n 10"` | awk -v TIME=$time '{if ($7 > TIME) print $1}'

但是 ssh 调用不返回新行,所以 awk 没有得到正确的信息。 任何人都知道在我首先尝试的内容中传递一个外部变量,或者如何在我第二次尝试的内容中保留 ssh 调用中的换行符?

【问题讨论】:

  • 在 awk 中,您不使用 $TIME。这不是错误,但不太可能是您想要的,即$7 > TIME
  • "last -n 10 | awk -v TIME=$time '{if ($7 > $TIME) print $1}'" 行按预期工作,这不是问题。将 ssh 带入等式时,不会执行 $time。
  • 尝试在 awk 脚本中打印 $TIME,看看它是否符合您的预期。 (在 awk 中,$ 是前缀运算符,其操作数是整数;值是索引字段。如果操作数大于字段数,则值只是空字符串,或算术上下文中的 0。 )
  • 我明白了,感谢您的洞察力!我的问题仍然存在:(。
  • 更新了主要问题以反映 rici 的帮助以及我尝试过的另一件事以不同的方式失败。

标签: linux bash shell awk ssh


【解决方案1】:

我有以下 test.sh:

#! /bin/bash
host=$1
mytime=$2
pastusers=`ssh -n $host "last -n 10" | awk -v TIME=$mytime '{if($7>TIME) print $1}'`
echo $pastusers

当我运行bash test.sh <some_valid_host> 20:00 时,它会按预期打印用户列表,所有用户都在同一行中。那些在同一行的也是预期的。

如果你有一个像 test.txt 这样的文件:

abc
def ghi

跑步

words=`cat test.txt`; echo $words

将在同一行打印abc def ghi。这是预期的行为。

【讨论】:

  • 谢谢.. 我发现我在第二次尝试中放错了一个 `.. 哈哈。
猜你喜欢
  • 1970-01-01
  • 2017-02-14
  • 2015-05-09
  • 2019-03-10
  • 1970-01-01
  • 2012-10-21
  • 2014-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多