From: AD Marshall <admarshall@gmail.com>
To: linux-newbie@vger.kernel.org
Cc: John Kelly <bilbo@waitrose.com>
Subject: [Solution] how-to: one command for repeat OR iterate shell OR bash command delay OR interval
Date: Tue, 19 Jul 2005 10:24:34 +0700 [thread overview]
Message-ID: <200507191024.36528.admarshall@gmail.com> (raw)
In-Reply-To: <200507171316.10728.admarshall@gmail.com>
I worked out a cheap, if buggy, hack for what i wanted this morning. But thanks all the same...
In case you're interested:
am@[sh]$ rewatch 2 'cat /proc/loadavg'
0.51 0.36 0.65 1/121 9072 09:56:08
0.51 0.36 0.65 1/121 9083 09:56:10
0.47 0.36 0.65 1/121 9088 09:56:13
am@[sh]$ rewatch 2 'cat /proc/loadavg' 'mozilla' | tee rewatch-mozilla
0.43 0.35 0.65 1/121 9100 09:56:20
am 32106 0.0 0.3 3832 988 ? S 07:37 0:00 /bin/sh /usr/bin/mozilla
am 32112 10.0 25.7 141688 66084 ? Sl 07:37 13:54 /opt/mozilla/lib/mozilla-bin
0.40 0.34 0.64 3/121 9109 09:56:22
am 32106 0.0 0.3 3832 988 ? S 07:37 0:00 /bin/sh /usr/bin/mozilla
am 32112 10.0 25.7 141688 66092 ? Sl 07:37 13:54 /opt/mozilla/lib/mozilla-bin
am@[sh]$ cat ~/bin/rewatch
#!/bin/sh
# rewatch, v. 0.01
#
# Usage: rewatch <n> <cmdline> [process-to-watch]
# n: seconds between repetitions
# cmdline: command-line to repeat
# process-to-watch: process for which "ps aux" info is to be displayed
#
# Purpose: repeat and, optionally, watch and record the "ps aux" info of
# that or any other process
#
# Bkgd: original purpose was to be able to input a command-line (in single
# quotes) along with an interval in seconds for its repetion and print a
# list of its stdouts labelled by the times they were printed until <Ctrl-c>
# is hit, and be able to capture all the output to stdout or a file.
#
# initial use was for watching and recording load averages as programs were
# loaded, eg, "re_watch 2 'cat /proc/loadavg' konqueror"
#
# Future: unknown
#
# Known Bugs: no input validation or user feedback for input errors
#
# Of course, bash operators will have to be properly quoted or escaped or
# not... -- which i still don't clearly understand
n=$1
cmdline=$2
proc2watch=$3
if test -z "$3"
then
while true ; do echo $( $cmdline && echo "$( date +%H:%M:%S )" ) ; sleep $n ; done
else
while true ; do echo $( $cmdline && echo "$( date +%H:%M:%S )" ) ; echo "$( ps aux | grep -vE "(rewatch |grep |tee )" | grep $proc2watch )" ; sleep $n ; done
fi
am@[sh]$
On Sunday 17 July 2005 13:16, AD Marshall wrote:
> my apologies, if necessary. but it's way past lunchtime in saigon and
> i'm STARVING. i'll check back later. thanx again. - best, andi
>
> On Sunday 17 July 2005 13:07, AD Marshall wrote:
> > On Sunday 17 July 2005 12:35, John Kelly wrote:
> > > Hi,
> > > On Sun, 17 Jul 2005 11:57:34 +0700
> > > AD Marshall <admarshall@gmail.com> wrote:
> > >
> > > > Is there already one bash command to do what the following script
> > > > does (poorly or incompletely), ie repeat "command" indefinitely
> > > > every "x" seconds:
> > > >
> > > > #!/bin/sh
> > > > # usage: repeat [x] <command>
> > > > while true ; do $2 ; sleep $1 ; done
> > > >
> > > > < rest deleted >
> > >
> > > The watch command might tbe what you want.
> > > Or maybe not, if you don't want anything output to screen.
> > >
> > > Try man watch for details.
> > >
> > <cut>
> > Ya. Thanks. I'd (long) forgotten about "watch".
> >
> > but, actually, i should be more specific. what i'm trying to do is
> > something like this -- though i'm screwing up on quoting or something
> >
> > am@[~]$ repeat 2 "echo $(cat /proc/loadavg ; date +%H:%m:%S)"
> > 0.05 0.14 0.24 6/127 27711 12:07:29
> > 0.05 0.14 0.24 6/127 27711 12:07:29
> > 0.05 0.14 0.24 6/127 27711 12:07:29
> >
> > as you can see, only one instance of load average and time are repeated.
> > i want a running record that can be redirected to a file
> >
> > i just tinkered with backslashes, back-quotes, double-quotes and
> > single-quotes, but all the quoting stuff still confuses me.
> >
> > and, imho, i would have thought someone would have written a simple
> > tool to do this ages ago. no?
> >
> > thanx again,
> > andi
> >
>
--
AD Marshall
Tel: +84 (0)903871313
eM: admarshall@gmail.com
Web: http://h0lug.sourceforge.net
Zone: ICT (IndoChina Time; GMT/UTC+7)
-
To unsubscribe from this list: send the line "unsubscribe linux-newbie" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.linux-learn.org/faqs
prev parent reply other threads:[~2005-07-19 3:24 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-07-17 4:57 how-to: one command for repeat OR iterate shell OR bash command delay OR interval AD Marshall
2005-07-17 5:35 ` John Kelly
2005-07-17 6:07 ` AD Marshall
2005-07-17 6:16 ` AD Marshall
2005-07-19 3:24 ` AD Marshall [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200507191024.36528.admarshall@gmail.com \
--to=admarshall@gmail.com \
--cc=bilbo@waitrose.com \
--cc=linux-newbie@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.