Initial commit: HPR Knowledge Base MCP Server
- MCP server with stdio transport for local use - Search episodes, transcripts, hosts, and series - 4,511 episodes with metadata and transcripts - Data loader with in-memory JSON storage 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
211
hpr_transcripts/hpr1843.txt
Normal file
211
hpr_transcripts/hpr1843.txt
Normal file
@@ -0,0 +1,211 @@
|
||||
Episode: 1843
|
||||
Title: HPR1843: Some Bash tips
|
||||
Source: https://hub.hackerpublicradio.org/ccdn.php?filename=/eps/hpr1843/hpr1843.mp3
|
||||
Transcribed: 2025-10-18 10:00:21
|
||||
|
||||
---
|
||||
|
||||
This is HPR Episode 1843 entitled Some Bash Tips, and in part of the series, Bash Cripting.
|
||||
It is hosted by Dave Morris, and in about 21 minutes long, the summer is a few useful
|
||||
Bash features that may not be well known.
|
||||
This episode of HPR is brought to you by AnanasThost.com.
|
||||
Get 15% discount on all shared hosting with the offer code HPR15, that's HPR15.
|
||||
Get your web hosting that's honest and fair at AnanasThost.com.
|
||||
Hello everyone, this is Dave Morris. I've got a show for you today which I thought might
|
||||
be of interest to some people, and it's about Bash. I've called it some Bash Tips, and
|
||||
I'm going to talk about three Bash commands, which I'm not sure if they are as popular
|
||||
as they used to be. You've heard me talk about this sort of thing before I'm a command line
|
||||
user, and I have been using the Bash command line or the pre-decessors for quite some
|
||||
time, and I wanted to talk about three commands related to directory movement, and they
|
||||
are called push-d, pop-d, and does, D-I-R-S. So I've structured my full note, I've got
|
||||
some long notes here, into a sort of basic overview section, in the assumption that if
|
||||
you're interested in this, that might be enough for you, and then there's a more advanced
|
||||
section, which goes into more of the guts of this stuff, so you're at liberty to skip
|
||||
that if you want to, I warn you when I'm getting onto that bit, so you can fast forward if
|
||||
that suits you. So let's start with push-d, push-d is normally followed by a directory name,
|
||||
and it just changes directory like using CD, but it does a bit more than that. It saves
|
||||
the previous directory, and the directory you've moved to in a stack. So I've given an
|
||||
example of logging in, being in your home directory, I've typed PWD in my example to show
|
||||
that I'm in my home directory, then I type push-d documents, and then I see a line that
|
||||
starts with tilde slash documents, space tilde, and what that indicates is that that's
|
||||
the stack, that's the representation of the stack, and the first element on the left
|
||||
is the directory I'm currently in, that's the top of the stack, and the second one is
|
||||
the directory I was in before, the tilde, that's my home directory. So it's showing it
|
||||
in this way, which you need to get your head around a bit, but there are better ways
|
||||
of showing it, which I'll come on to in a moment or two. So that's how you would change
|
||||
directory, you can keep on pushing and pushing and pushing and moving on back in directories,
|
||||
but when you want to go back to a directory, there's a complimentary command, pop-d, p-o-p-d,
|
||||
this moves back to the previous directory. So in other words, it takes the topmost directory
|
||||
off the stack, the one that you're currently in, takes it off the stack, and changes directory
|
||||
to the one that's now the top, so effectively the second one working down the stack. In my
|
||||
example, in the notes, I'm in the document directory, I type pop-d, and I get a line that
|
||||
shows just a single tilde, and when I type p-w-d, I see I'm back in my home directory. You
|
||||
can see what it's doing there. The stack can be any lengthy one, I think, I don't know
|
||||
that there are any particular limits. There is another command which doesn't do any
|
||||
movement, but it tells you about where you are in this stack, and things about the stack,
|
||||
and it's doors, D-I-R-S, and it can display the directory's stack, and when you normally
|
||||
type it, it shows it in that left to right format, so it shows the directory currently
|
||||
in on the left, then the next one down the stack to the right of that, and the next one
|
||||
to the right of that, and so forth. There's a nicer way of using it, or to my mind,
|
||||
anyway, a nicer way of using it, which is to use an option, minus V, minus V to the doors
|
||||
command shows the stack as a vertical list with index numbers. So, I've given an example,
|
||||
where my example was before I was in the top level directory, so I pushed the documents
|
||||
again, go back down to the documents directory, and there's another directory in there called
|
||||
subder, just made for this demonstration, really, push D into that. So, what I get back
|
||||
from the second push D is tilde slash documents slash subder, which is the directory I'm
|
||||
in just now, followed by tilde slash documents, followed by tilde. If I then type doors minus
|
||||
V, D, E, R, S, space, minus V, then I see a list that shows zero and tilde document slash
|
||||
subder, one, tilde documents, two, tilde each on the separate line, and in a stack. So,
|
||||
it shows it as the stack, and the top of the stack is the zero element, and it's the
|
||||
one at the top of the list. So, the horizontal display is what's normally shown after
|
||||
push D or a pop D, but you can force the vertical listing using the doors command. Okay, well,
|
||||
that's the three commands in brief. Now, I'm going to dig down deeper and start talking about
|
||||
them in more detail. They do have quite a lot more features than we've seen so far, and what I've
|
||||
done is I've taken the man pages for these three commands, and I have reformatted them to make
|
||||
to my mind a little bit more readable, and I've stuck them on the end of my full notes, which will
|
||||
be available on the website naturally. The first point is you can use push D to add a directory to
|
||||
the directory stack without changing to that directory. Use the minus A in option to do this.
|
||||
So, my example shows we're back at the top directory again, the whole directory, and we type push D
|
||||
space minus N space tilde slash documents. Didn't actually need the tilde slash, just documents
|
||||
would have been enough because it would have been interpreted as the document's directory
|
||||
immediately below where we currently are, but this is just me being pedantic. So, what we see in
|
||||
this stack is tilde, which is the home directory, where we currently are. We haven't moved, followed by
|
||||
tilde slash documents. What's happened is that the document's directory has been placed underneath
|
||||
element zero on the stack, has been made into element one on the stack. So, the next example shows
|
||||
push D, space minus N, space tilde slash documents slash subder. So, we're still in the top level
|
||||
directory, so we're referring to the documents that directory with the sub directory underneath it,
|
||||
and we add that to the stack, and that gets put at position one. So, when we see the horizontal
|
||||
display of the stack, we see tilde, space, tilde slash documents slash subder, space tilde slash
|
||||
documents. Now, type does minus V to show the thing vertically, and we see the same things numbered
|
||||
zero one two. Now, the order of this stack is not the same as it was when we we visited these
|
||||
directories by doing a push D down into each one, without the minus N. Now, this could be useful if
|
||||
you wanted to preload the stack without actually visiting those directories, but you put them there,
|
||||
because you wanted to visit them at a later stage. Another feature of push D is that you can
|
||||
fiddle around with the order of the stack. Well, to be more precise, you can rotate it as if it's
|
||||
a loop, so you can take the element one and push it to the top, and that causes element zero to go
|
||||
right round to the bottom. So, it's a loop that rotates, and you can rotate it in either direction.
|
||||
This is done using options that are written in the manual pages as plus N and minus N, but in this
|
||||
case, N means an integer number, not the letter N. So, you'd use something like push D plus two,
|
||||
that means rotate the stack so that entry number two counting from the left, or as you see it when
|
||||
you're when you're number it with does minus V, it gets raised to the top, and then everything else
|
||||
rotates appropriately, and I've shown it in an example, push D plus two rotates things so that
|
||||
the element number two, in which we saw in the previous example, gets pushed at the top, so you get
|
||||
tilde slash documents at the top, then after documents, if you looped round, would be tilde,
|
||||
so you see that next, and after that is tilde slash documents slash subter. You can also use negative
|
||||
numbers, that causes the rotation to have in the same direction, but it refers to the elements
|
||||
starting from the bottom. You might find this confusing, I sure as hell do, and I've no
|
||||
don't think I've ever used this, I've certainly done all this push D business of shuffling things round
|
||||
in the in the past, that was the way I used to build up a stack of directories and then move
|
||||
about between them, because if you do that, you don't ever lose them, they stay in the stack,
|
||||
you just move them into different positions, but the negative one I've never found was all that
|
||||
useful as probably shows my limitations of my brain, but still find it a bit weird. So my example,
|
||||
I've used push D minus zero, what that says is minus zero means start counting at zero from the bottom
|
||||
of the stack, and the way we left the stack, the previous example was with a document slash subter
|
||||
at the bottom of the stack, element two if you're counting from from the top, so minus zero means
|
||||
the bottom most one, it says bring it up to the top, but bringing it up to the top rotates the other
|
||||
ones down appropriately, if you follow me, so it's when you do that, you see the directories listed
|
||||
as, this is doing using the left to right notation, tilde slash document slash subter, that's the
|
||||
one we just asked for to be on the top, then that's followed by tilde documents, which is the next one
|
||||
in the loop of documents followed by tilde, you can't change the order, you can't swap tilde
|
||||
documents until the document slash subter, you can't do that, you're just rotating this round
|
||||
in a ring, I have to admit, I had never fully understood this, at least if I did, I'd forgotten it,
|
||||
so in preparing for this show, I think I've got my head round it now, I've shown in this example
|
||||
another option to the doors command, doors minus p, that simply lists the directories without
|
||||
bothering to number them, given that the numbering can go either way depending on whether you're
|
||||
using plus n or minus n in push d, push d, then it could be advantageous to do it that way, there's
|
||||
no way of doing the numbering in the negative direction, actually it would be fun to write something
|
||||
to provide that capability, I think about doing that one day, so that's pretty much all of
|
||||
what push d can do, now let's look at pop d in a bit more detail, pop d of course again is documented
|
||||
in my modified man page, it also takes a minus n where the actual letter n, which allows
|
||||
to manipulate the stack without changing directory, so if we assume, I've refreshed everything,
|
||||
I'm starting at the top level directory now, so first of all do a push d of documents, so my stack
|
||||
consists of tilde slash documents followed by tilde, then if I add into that subter as I did
|
||||
before, so I've got slash document slash subter on the top and then documents then tilde,
|
||||
if I then do pop d minus n, what would that do, would you think?
|
||||
Well the answer is it removes, removes, that is, we're not rotating now, it actually removes
|
||||
from the directory stack the first element, element one, I'm not very good at this,
|
||||
zero base counting stuff, it takes away tilde slash documents and you're left with
|
||||
tilde slash document slash subter followed by tilde, so it doesn't actually change the
|
||||
directory you're in, it doesn't change the top of the stack but it kills the next one down,
|
||||
so I then show using pop d without any arguments, which we saw earlier on means
|
||||
throw away the top of the stack and change directory to the next one down, which was
|
||||
the tilde, so we're now at the home directory again, so I made a note here that pop d minus n
|
||||
always takes away element one from the stack counting in the normal way, counting from left
|
||||
to right, whereas plain pop d removes the zeroth element of the stack, we could also use the plus
|
||||
and minus integer thing, so pop d plus three means to remove directory three from the stack counting
|
||||
from the left and then and possibly confusingly pop d minus two means remove the the one counting
|
||||
from the right to two positions from the right, this is not stack rotations I've pointed out in the
|
||||
but explicit deletion, so I've got an example here which looks a bit daunting, but all I did was
|
||||
create a top level directory called test one, when it with init another directory called test two
|
||||
within that test three within that test four, so I just do a push d to each one of those in turn
|
||||
and end up with a stack of zeroth element being tilde slash test one, test two, test three,
|
||||
test four and so on down to the fourth element four I should say which is tilde, okay, I won't read
|
||||
these out because you'll get so stunningly bored, so I probably, so if I then type pop d plus three
|
||||
or do expect that to do, well that means take away the element which is numbered three in that
|
||||
doors minus v listing that I included, so that was tilde slash test one, so do that and there you
|
||||
go, tilde slash test one has been taken out of the directory stack, so then I did pop d plus zero,
|
||||
that means take away the zeroth element which it does, but because you've now removed it and
|
||||
that's normally the directory you're in, it changes directory for you to the one that's now become
|
||||
the top of the stack which is test one slash test two slash test three, then finally in this
|
||||
this example I use the negative integer business pop d minus one takes the element which is one
|
||||
position counting from zero from the right, so in the stack we've got test one, test two, test three
|
||||
followed by test one, test two followed by a home directory tilde, so counting minus one
|
||||
skips over the tilde and goes to test one, test two, so we remove that and all we're left with is
|
||||
test one, test two, test three and then tilde, shouldn't it call these test ones and things,
|
||||
it would have turned a better, if that just called them one, two, three wouldn't it, oh well,
|
||||
seem like a good idea at the time, anyway I do a doors minus v at the end to show you what's left,
|
||||
just to prove the point, finally let's look at the doors command in a bit more detail and again
|
||||
I've put a version of the man page in the notes and you've seen me using doors minus v to show the
|
||||
directory stack in this what I think to be a more readable form with numbers and you've also
|
||||
seen me using the minus p option where it does the same but without numbers, there's also a minus
|
||||
l option which lists the directories but gives the full path name so it replaces the tilde
|
||||
with the explicit home directory, haven't demonstrated that, you can with the doors command just
|
||||
clear the entire directory stack using minus c, it just drops the whole thing
|
||||
and but it leaves you in the directory you were before you issued the command, it doesn't,
|
||||
doesn't move you around within the stack in any any sense it just blitzes it, now you can use
|
||||
the doors command to make it clear to yourself which directory you will get if you use one of
|
||||
this plus or minus integer options and I've done an example here to demonstrate this, what I've
|
||||
done is I've gone back to the top level directory then I've gone all the way through this test one,
|
||||
two, three business again, I've just done the wall on the same line pushing in the
|
||||
wall onto the stack so we end up with a stack of all these directories as before but I won't read
|
||||
out then I typed doors plus three meaning tell me which directory is number three on the stack in
|
||||
other words it's it's number three counting from zero from the left and the answer is tilde slash
|
||||
test one and I do a doors minus V so you can improve that that's that's the case so if you
|
||||
were going to type a pop D or a push D or something with a plus three in it it might be useful to
|
||||
use that first just to check that it's going to do what you want it to do then I also do do does
|
||||
minus three just to prove that counting up from the bottom or from the the right if you prefer to
|
||||
think of it in that term gets you to where you want to be so minus three there's three places
|
||||
it knows the three places counting from zero so it shows the directory test one test two test three
|
||||
it's actually hard to say this hope you've got the gist of what I'm trying to to explain you
|
||||
so I hope I haven't driven you away from this rather than attracting you towards it by all of this
|
||||
whiter but I think it can be quite useful now written a short conclusion here why use them what
|
||||
use are they well I actually started using these long time ago pre linux when I was working on
|
||||
older unique systems like Dexaltrix and Sun Sunos and Solaris and HPUX HPUX operating system
|
||||
all of which were versions of Unix that had SH or Bash shells on them and they they did have
|
||||
pop pushed in popdy and some at some point it was real terminals I would been using with these
|
||||
things and so you just had the one you don't have windows at all you just had a terminal so you
|
||||
were you were there was a non graphical display so there was there was times when being
|
||||
able to jump around between um directories in this way was quite fun and it was before the days
|
||||
of terminal emulators and windowed systems and virtual test stops and all these other goodies so
|
||||
I used to be able to since my job entailed often dealing with people's problems as well as doing
|
||||
some development or or system management or something it was often necessary to stop what I was doing
|
||||
and then go and do some something somewhere else in a directory on the system and then come back
|
||||
to what I was doing so it was really useful to be able to use pushd to go to that other place
|
||||
do the thing find the answer or whatever it was and then say right that's dealt with now I can go
|
||||
back to what I was doing and do popdy back to where I'd come from it's I guess it's less of an
|
||||
issue these days I personally tend to have several terminal emulators on several virtual
|
||||
desktops on my workstation and in each terminal emulator I've usually got multiple tabs
|
||||
and I I'm in a different directory on each one and I hop around between tabs and screens and
|
||||
this sort of thing so I tend to use pushed in popdy less but there's on there's occasions where
|
||||
I am wanting to to step away from what I'm doing just to do something else briefly and then come
|
||||
back to it without opening another tab or something and I find it useful to have that in my toolkit
|
||||
so you might find it useful as well hope you do anyway okay that's it bye
|
||||
you've been listening to Heka Public Radio at Heka Public Radio dot org
|
||||
we are a community podcast network that releases shows every weekday Monday through Friday
|
||||
today's show like all our shows was contributed by an hbr listener like yourself if you ever
|
||||
thought of recording a podcast then click on our contributing to find out how easy it really is
|
||||
Heka Public Radio was founded by the digital dog pound and the infonomican computer club
|
||||
and it's part of the binary revolution at binrev.com if you have comments on today's show
|
||||
please email the host directly leave a comment on the website or record a follow up episode yourself
|
||||
unless otherwise stated today's show is released on the creative comments attribution share
|
||||
freedom license
|
||||
Reference in New Issue
Block a user