139 lines
8.5 KiB
Plaintext
139 lines
8.5 KiB
Plaintext
|
|
Episode: 4155
|
||
|
|
Title: HPR4155: GNU sleep tips
|
||
|
|
Source: https://hub.hackerpublicradio.org/ccdn.php?filename=/eps/hpr4155/hpr4155.mp3
|
||
|
|
Transcribed: 2025-10-25 20:28:02
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
This is Hacker Public Radio Episode 4155 for Friday 5 July 2024.
|
||
|
|
Today's show is entitled, New Sleep Tips.
|
||
|
|
It is hosted by Delta Ray and is about 10 minutes long.
|
||
|
|
It carries a clean flag.
|
||
|
|
The summary is, Delta Ray gives an overview of the sleep command and some uses for it.
|
||
|
|
You are listening to a show from the Reserve Q.
|
||
|
|
We are airing it now because we had free slots that were not filled.
|
||
|
|
This is a community project that needs listeners to contribute shows in order to survive.
|
||
|
|
Please consider recording a show for Hacker Public Radio.
|
||
|
|
Ah, sleep.
|
||
|
|
Isn't sleep great?
|
||
|
|
Wouldn't you like to sleep all the time?
|
||
|
|
Especially when you can pass decimal numbers to it and use it to annoy your friends.
|
||
|
|
Wait, what?
|
||
|
|
No, not that kind of sleep.
|
||
|
|
I mean GNU sleep, which is a command that can be used in the shell to delay execution
|
||
|
|
before or after a command.
|
||
|
|
Hi, I'm Delta Ray, creator of CLI Magic on Mastodon and Twitter.
|
||
|
|
I use the sleep program all the time.
|
||
|
|
You can try it too, simply run sleep space 5 and you will see it return your command prompt
|
||
|
|
after 5 second delay.
|
||
|
|
But what uses that?
|
||
|
|
Well, using the semicolon to divide a command into sections, you can sleep for a set
|
||
|
|
amount of time before running another command.
|
||
|
|
Maybe you want to get a notification after a certain amount of time has passed.
|
||
|
|
Say an hour.
|
||
|
|
You could pass 3,600 to it as the number of seconds an hour.
|
||
|
|
But modern versions of GNU sleep are more robust and can take unit measurements in their arguments.
|
||
|
|
So for an hour, you can just pass it 1H as the argument to sleep with sleep space 1H.
|
||
|
|
You can also use compound times such as two hours and 45 minutes by just adding the
|
||
|
|
additional divisions as additional arguments.
|
||
|
|
So sleep space 2H space 45M for minutes.
|
||
|
|
You could use sleep as a Pomodoro timer, which is an Italian 25 minute timer that looks
|
||
|
|
like a tomato in order to keep you focused.
|
||
|
|
This could simply be a matter of sleeping for 25 minutes and then running some other
|
||
|
|
kind of alert program, such as the socks package to run playspacebell.wave or something
|
||
|
|
similar to that.
|
||
|
|
So you would put in a command of sleep space 25M, semicolon, spaceplayspacebell.wave.
|
||
|
|
Of course a true Pomodoro timer will make a ticktock sound to help you focus.
|
||
|
|
While it wouldn't use the sleep command, you could use the socks play command to repeatedly
|
||
|
|
play a ticktock sound for 25 minutes.
|
||
|
|
The command for that is in the show notes, a little bit complex.
|
||
|
|
Speaking of notifications, there is also a nice program you can use to notify you through
|
||
|
|
the desktop under Linux called Notify-Send.
|
||
|
|
You will submit a message into the notification demon so that it shows up similar to other
|
||
|
|
notifications show up, such as when you need to restart your computer after doing system
|
||
|
|
updates or if you connect your Bluetooth headphones to your computer and other notifications.
|
||
|
|
To use Notify-Send, simply type in Notify-Send-Space and then in double quotes put the message
|
||
|
|
you want to show.
|
||
|
|
When you hit Enter, it should send a message and display it somewhere on your screen, probably
|
||
|
|
up in the upper right hand corner.
|
||
|
|
So if you order to pizza, but you still want to work for a bit, but you don't want to
|
||
|
|
forget that you order to pizza, you might set up a sleep timer to notify you in 15 minutes
|
||
|
|
that you need to go pick up the pizza.
|
||
|
|
So you'd put sleep space 15M, then semicolon, notify-send, space, and double quotes pick
|
||
|
|
up the pizza.
|
||
|
|
The sleep command is especially useful in shell loops such as a four loop that runs a command
|
||
|
|
that you don't want to run as quickly as possible or a while loop that you don't want the
|
||
|
|
command to run as quickly as possible, but you want to have a little bit of a delay.
|
||
|
|
For instance, if you have a temperature probe hooked up to your computer and you want
|
||
|
|
to just watch the temperature every 10 minutes, not like every single second.
|
||
|
|
So you use a while loop and a sleep command to create an internal display.
|
||
|
|
So you have while, space, temperature probe command, semicolon, do, space, sleep, space
|
||
|
|
10M, semicolon, done, and then it will run temperature probe every 10 minutes.
|
||
|
|
You might also want to download a bunch of files from a website, but don't want to
|
||
|
|
overload the website with your requests.
|
||
|
|
While some of the programs like Curl and W get do have delay commands as options, you
|
||
|
|
can also use sleep in the loop.
|
||
|
|
This is especially good if you use the dollar random variable, like the random variable
|
||
|
|
enbashed at a bit of random time to your sleep commands so that it looks a bit more like
|
||
|
|
human behavior.
|
||
|
|
The random variable gives you a random number between 0 and 32,767, which is 2 to the 15th,
|
||
|
|
minus 1.
|
||
|
|
But you can limit the upper and lower bounds using a bit of show arithmetic and the
|
||
|
|
modulus operator.
|
||
|
|
For instance, if you want to just have a number between 0 and 5, you can use dollar open
|
||
|
|
parentheses twice, random, percent, 6, and then close parentheses twice.
|
||
|
|
This is basically the show arithmetic for doing a modulo division of random modulo 6.
|
||
|
|
You have to use a number one higher than the top of the range in the modulo arithmetic
|
||
|
|
if you want to include the boundary number itself.
|
||
|
|
So if you want to include five, you have to divide by six.
|
||
|
|
And if you want to increase the bottom boundary number, you can just add whatever you want,
|
||
|
|
the bottom boundary to be to the result of the modulo operation.
|
||
|
|
So as an example, the following command will loop through a list of URLs in a file, running
|
||
|
|
the WGet command on each iteration of the loop, and then sleeping a random value between
|
||
|
|
30 and 60 seconds.
|
||
|
|
So you'd say four space URL, space in, and then dollar parentheses, cat URLs dot txt,
|
||
|
|
close parentheses, semicolon, do, space, WGet, space, dollar URL in double quotes, semicolon,
|
||
|
|
sleep, and then dollar double open parentheses, random, percent, 31 plus 30, double close
|
||
|
|
parentheses, semicolon, done.
|
||
|
|
As an April Fool's gag, you could implement a poor man's annoy a tron that plays a high-pitched
|
||
|
|
noise at 9,000 hertz every three to six minutes using the SOX play command.
|
||
|
|
The command for this is in the show notes.
|
||
|
|
So basically you say, while true, do play the sound, and then semicolon, sleep, double
|
||
|
|
open parentheses, random, percent, four plus three, double parentheses, close, M for the
|
||
|
|
minutes, and then semicolon, done.
|
||
|
|
If you ever want to animate something to do an action that requires a set frame time
|
||
|
|
so that the eye has a chance to see it, or so that the system has a chance to register
|
||
|
|
a mouse move in or key press or something like that, you'll need to use millisecond
|
||
|
|
length sleeps.
|
||
|
|
Fortunately, GNU sleep now accepts millisecond or sub-second length sleeps.
|
||
|
|
It actually didn't for a long time up until around 2010 or something like that, and there
|
||
|
|
was another program that you had to use called sleep, ENC, which is stood for sleep enhanced
|
||
|
|
or sleep in H, something like that, but later they enhanced the GNU sleep command to accept
|
||
|
|
sub-second delays, which is really nice.
|
||
|
|
So for instance, if you wanted to do something at a rate of 30 frames per second, you need
|
||
|
|
to use a sleep value of 0.0333333, of course, repeating forever, but you can just put in
|
||
|
|
three threes, or maybe a little less considering how much processing you have to do per frame.
|
||
|
|
In other words, if the amount of time it takes to run the command is significant, you might
|
||
|
|
have to decrease the delay time so that if you want to really meet that 30 frames per
|
||
|
|
second.
|
||
|
|
I have a bunch of examples of this type of thing on the CLI magic account, and I'll include
|
||
|
|
a link in the show notes to a list of the posts I've made over the years that include sleep
|
||
|
|
commands in them.
|
||
|
|
But some examples are things like making a rainbow in the shell or moving the mouse in
|
||
|
|
a spiral and stuff like that.
|
||
|
|
I hope I've given you some ideas for how you can use the sleep command in your daily life.
|
||
|
|
There are, of course, many, many more uses for this simple command.
|
||
|
|
If you have some of your own ideas or uses that you'd like to share or encourage you
|
||
|
|
to share in a comment on the HPR website, also, HPR can use your help.
|
||
|
|
We're running low on shows and we really need new voices to participate.
|
||
|
|
See the website link give shows for more details.
|
||
|
|
Thanks, and take care.
|
||
|
|
You have been listening to Hacker Public Radio at HackerPublicRadio.org.
|
||
|
|
Today's show was contributed by a HPR listener like yourself.
|
||
|
|
If you ever thought of recording podcasts, then click on our contribute link to find
|
||
|
|
out how easy it really is.
|
||
|
|
Posting for HPR has been kindly provided by an onsthost.com, the Internet Archive and
|
||
|
|
our syncs.net.
|
||
|
|
On this advice status, today's show is released under Creative Commons, Attribution 4.0
|
||
|
|
International License.
|