【问题标题】:Ping result to log script (El Capitan)Ping 结果记录脚本 (El Capitan)
【发布时间】:2016-10-22 06:27:59
【问题描述】:

我正在开发一个运行 El Capitan 的 mac。

对于我一直从事的项目,我正在尝试编写一个简单的脚本来记录 ping 时间。我得出的结论并不像我想象的那么简单。我的第一个问题是使用变量时的“不明确的重定向”。在$INPUT Ambiguous redirect 的帮助下,我已经纠正了这一点,在变量周围使用引号

但现在运行以下脚本时出现不同的错误:

#!/bin/sh

set PINGDELAY=1.5
set PINGIP=google.nl
set PINGLOG=~/Library/Logs/doctorping.log

sudo ping -i "$PINGDELAY" "$PINGIP" | perl -nle 'use Time::Piece; BEGIN {$|++} print localtime->datetime, " ", $_' >> "$PINGLOG"

错误是

ping: invalid timing interval: `'

这可能是我忽略的东西,但在脚本和编程方面我是一个真正的菜鸟。

我的目标不是处理文本或提取其中的一部分,它只是监视连接并将结果写入日志。限制日志行的数量可能是明智的,但我稍后会谈到。 (当然,如果有人能指出我正确的方向,我们将不胜感激,但首先要做的是)

谢谢!

【问题讨论】:

    标签: bash ping osx-elcapitan


    【解决方案1】:

    如果您像这样使用bash 而不是sh,则效果很好:

    #!/bin/bash -xv
    
    PINGDELAY=1.5
    PINGIP=google.nl
    PINGLOG=~/Library/Logs/doctorping.log
    
    sudo ping -i "$PINGDELAY" "$PINGIP"
    

    -xv 仅用于调试 - 您可以安全地删除它。

    【讨论】:

      【解决方案2】:

      set命令不是设置shell变量;它用于设置 shell 执行选项和/或替换脚本的参数列表。把它关掉就行了。此外,最好使用小写(或混合大小写)变量名,以避免意外使用对 shell 具有特殊意义的变量之一。这是我得到的:

      #!/bin/sh
      
      pingdelay=1.5
      pingIP=google.nl
      pinglog=~/Library/Logs/doctorping.log
      
      sudo ping -i "$pingdelay" "$pingIP" | perl -nle 'use Time::Piece; BEGIN {$|++} print localtime->datetime, " ", $_' >> "$pinglog"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-18
        • 2017-01-09
        相关资源
        最近更新 更多