我正在寻找在Mac OS x上复制Linux 'watch'命令的最佳方法。我想每隔几秒钟运行一个命令,使用'tail'和'sed'对输出文件的内容进行模式匹配。

我在Mac电脑上最好的选择是什么?不下载软件能做到吗?


当前回答

下面是这个答案的一个稍微改变的版本:

检查有效参数 在顶部显示日期和持续时间标题 将"duration"参数移动到第一个参数,这样复杂的命令可以很容易地作为其余参数传递。

使用它:

保存到~/bin/watch 在终端中执行chmod 700 ~/bin/watch使其可执行。 通过运行watch 1 echo“hi there”来尝试它

~ / bin /手表

#!/bin/bash

function show_help()
{
  echo ""
  echo "usage: watch [sleep duration in seconds] [command]"
  echo ""
  echo "e.g. To cat a file every second, run the following"
  echo ""
  echo "     watch 1 cat /tmp/it.txt" 
  exit;
}

function show_help_if_required()
{
  if [ "$1" == "help" ]
  then
      show_help
  fi
  if [ -z "$1" ]
    then
      show_help
  fi
}

function require_numeric_value()
{
  REG_EX='^[0-9]+$'
  if ! [[ $1 =~ $REG_EX ]] ; then
    show_help
  fi
}

show_help_if_required $1
require_numeric_value $1

DURATION=$1
shift

while :; do 
  clear
  echo "Updating every $DURATION seconds. Last updated $(date)"
  bash -c "$*"
  sleep $DURATION
done

其他回答

当你的主命令需要相当长的时间才能完成时,为了防止闪烁,你可以捕获输出,并只在它完成时清除屏幕。

function watch {while :; do a=$($@); clear; echo "$(date)\n\n$a"; sleep 1;  done}

然后用它:

watch istats

使用Nix包管理器!

安装Nix,然后执行Nix -env -iA nixpkgs。在完成安装说明(包括采购)后,它应该可以使用。“$HOME/.nix-profile/etc/profile.d/nix.sh”)。

下面是这个答案的一个稍微改变的版本:

检查有效参数 在顶部显示日期和持续时间标题 将"duration"参数移动到第一个参数,这样复杂的命令可以很容易地作为其余参数传递。

使用它:

保存到~/bin/watch 在终端中执行chmod 700 ~/bin/watch使其可执行。 通过运行watch 1 echo“hi there”来尝试它

~ / bin /手表

#!/bin/bash

function show_help()
{
  echo ""
  echo "usage: watch [sleep duration in seconds] [command]"
  echo ""
  echo "e.g. To cat a file every second, run the following"
  echo ""
  echo "     watch 1 cat /tmp/it.txt" 
  exit;
}

function show_help_if_required()
{
  if [ "$1" == "help" ]
  then
      show_help
  fi
  if [ -z "$1" ]
    then
      show_help
  fi
}

function require_numeric_value()
{
  REG_EX='^[0-9]+$'
  if ! [[ $1 =~ $REG_EX ]] ; then
    show_help
  fi
}

show_help_if_required $1
require_numeric_value $1

DURATION=$1
shift

while :; do 
  clear
  echo "Updating every $DURATION seconds. Last updated $(date)"
  bash -c "$*"
  sleep $DURATION
done

你可以用shell循环来模拟基本的功能:

while :; do clear; your_command; sleep 2; done

这将永远循环,清除屏幕,运行命令,并等待两秒钟-基本的watchyour_command实现。

你可以更进一步,创建一个watch.sh脚本,它可以接受your_command和sleep_duration作为参数:

#!/bin/bash
# usage: watch.sh <your_command> <sleep_duration>

while :; 
  do 
  clear
  date
  $1
  sleep $2
done

如果手表不想通过安装

brew install watch

有另一个类似的/复制版本,安装和工作完美为我

brew install visionmedia-watch

https://github.com/tj/watch