From: Alejandro Colomar <alx.manpages@gmail.com>
To: Adam Thornton <athornton@gmail.com>, Dan Cross <crossd@gmail.com>
Cc: Douglas McIlroy <douglas.mcilroy@dartmouth.edu>,
TUHS main list <tuhs@tuhs.org>
Subject: [TUHS] Re: A few comments on porting the Bourne shell
Date: Thu, 5 Jan 2023 02:51:28 +0100 [thread overview]
Message-ID: <bf914d26-8746-7cf3-1e3d-eb3b3c07c37e@gmail.com> (raw)
In-Reply-To: <C7C6136E-BA3F-48B9-9E8B-FA90BDC10DFB@gmail.com>
On 1/4/23 02:29, Adam Thornton wrote:
>> On Jan 3, 2023, at 10:26 AM, Dan Cross <crossd@gmail.com> wrote:
>>
>>
>> A few years ago, I was having lunch with some folks from the Go team
>> and one of them remarked, "you shouldn't write a shell script that's
>> longer than about 10 lines. Once you do, it's time to rewrite it in a
>> real programming language." I was a bit taken aback, but they had a
>> point. I'll note that Go standardized on using bash everywhere.
I have many counterexamples that take more than 10 lines. I'll show a couple
that are very useful to me:
# man_section() prints specific manual page sections (DESCRIPTION, SYNOPSIS,
# ...) of all manual pages in a directory (or in a single manual page file).
# Usage example: .../man-pages$ man_section man2 SYNOPSIS 'SEE ALSO';
man_section()
{
if [ $# -lt 2 ]; then
>&2 echo "Usage: ${FUNCNAME[0]} <dir> <section>...";
return $EX_USAGE;
fi
local page="$1";
shift;
local sect="$*";
find "$page" -type f \
|xargs wc -l \
|grep -v -e '\b1 ' -e '\btotal\b' \
|awk '{ print $2 }' \
|sort \
|while read -r manpage; do
(sed -n '/^\.TH/,/^\.SH/{/^\.SH/!p}' <"$manpage";
for s in $sect; do
<"$manpage" \
sed -n \
-e "/^\.SH $s/p" \
-e "/^\.SH $s/,/^\.SH/{/^\.SH/!p}";
done;) \
|man -P cat -l - 2>/dev/null;
done;
}
I don't think it's unreadable by being too long, and in every other language it
would take a lot more work to implement. And here's another one, which I used a
lot until I wrote grepc(1)[1]:
# grep_syscall() finds the prototype of a syscall in the kernel sources,
# printing the filename, line number, and the prototype.
# It should be run from the root of the linux kernel source tree.
# Usage example: .../linux$ grep_syscall openat2;
#
# See also: grepc(1)
grep_syscall()
{
if [ $# -ne 1 ]; then
>&2 echo "Usage: ${FUNCNAME[0]} <syscall>";
return $EX_USAGE;
fi
find ./* -type f \
|grep '\.c$' \
|xargs grep -l "$1" \
|sort \
|xargs pcregrep -Mn "(?s)^\w*SYSCALL_DEFINE.\($1\b.*?\)" \
|sed -E 's/^[^:]+:[0-9]+:/&\n/';
find ./* -type f \
|grep '\.[ch]$' \
|xargs grep -l "$1" \
|sort \
|xargs pcregrep -Mn "(?s)^asmlinkage\s+[\w\s]+\**sys_$1\s*\(.*?\)" \
|sed -E 's/^[^:]+:[0-9]+:/&\n/';
}
Cheers,
Alex
[1]: <http://www.alejandro-colomar.es/src/alx/alx/grepc.git/>
>
>
> My number is larger than 10, but it's smaller than 100.
next prev parent reply other threads:[~2023-01-05 1:53 UTC|newest]
Thread overview: 112+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-01-03 15:08 Douglas McIlroy
2023-01-03 15:57 ` Alejandro Colomar
2023-01-03 17:19 ` Jon Steinhart
2023-01-05 13:22 ` Tom Ivar Helbekkmo via TUHS
2023-01-05 21:11 ` Rob Pike
2023-01-03 17:26 ` Dan Cross
2023-01-03 18:07 ` Steve Nickolas
2023-01-03 20:19 ` Steffen Nurpmeso
2023-01-03 23:03 ` ron minnich
2023-01-04 1:37 ` Bakul Shah
2023-01-04 1:58 ` Adam Thornton
2023-01-04 15:19 ` Ralph Corderoy
2023-01-04 18:01 ` Bakul Shah
2023-01-04 20:46 ` Alejandro Colomar
2023-01-05 0:06 ` John Cowan
2023-01-05 0:41 ` Adam Thornton
2023-01-04 5:05 ` Theodore Ts'o
2023-01-03 18:19 ` Niklas Karlsson
2023-01-04 1:29 ` Adam Thornton
2023-01-05 1:51 ` Alejandro Colomar [this message]
-- strict thread matches above, loose matches on Subject: below --
2022-12-31 13:26 Douglas McIlroy
2022-12-31 22:19 ` Rob Pike
2022-12-30 18:25 [TUHS] " Paul Ruizendaal
2022-12-30 19:51 ` [TUHS] " Chet Ramey
2022-12-30 20:02 ` Larry McVoy
2022-12-30 20:31 ` Adam Thornton
2022-12-30 20:49 ` Chet Ramey
2022-12-30 20:42 ` Sven Mascheck
2022-12-30 20:48 ` Jon Steinhart
2022-12-30 20:51 ` Sven Mascheck
2022-12-31 11:40 ` Ralph Corderoy
2022-12-31 18:49 ` Jon Steinhart
2022-12-31 19:24 ` Clem Cole
2023-01-03 16:32 ` Chet Ramey
2023-01-01 1:51 ` Ron Natalie
2022-12-30 20:47 ` Chet Ramey
2022-12-31 0:08 ` Luther Johnson
2022-12-31 3:59 ` Larry McVoy
2022-12-31 4:12 ` Steve Nickolas
2022-12-31 4:18 ` Bakul Shah
2022-12-31 4:40 ` Larry McVoy
2022-12-31 4:19 ` Marc Donner
2022-12-31 4:23 ` Dave Horsfall
2022-12-31 4:37 ` Clem Cole
2023-01-02 5:10 ` Mary Ann Horton
2023-01-02 16:25 ` Clem Cole
2023-01-02 16:51 ` Larry McVoy
2023-01-02 17:32 ` Adam Thornton
2023-01-02 17:43 ` Larry McVoy
2023-01-02 17:48 ` Luther Johnson
2023-01-02 18:00 ` G. Branden Robinson
2023-01-02 18:05 ` Luther Johnson
2023-01-02 18:12 ` Larry McVoy
2023-01-02 18:16 ` Clem Cole
2023-01-02 19:50 ` Warner Losh
2023-01-02 20:05 ` Adam Thornton
2023-01-02 19:21 ` G. Branden Robinson
2023-01-02 19:34 ` Rich Salz
2023-01-02 20:12 ` Larry McVoy
2023-01-02 20:24 ` G. Branden Robinson
2023-01-02 20:41 ` Larry McVoy
2023-01-02 21:00 ` Dan Cross
2023-01-02 21:06 ` Clem Cole
2023-01-02 21:19 ` Dan Cross
2023-01-02 22:54 ` segaloco via TUHS
2023-01-02 23:58 ` Jon Steinhart
2023-01-04 9:00 ` Joseph Holsten
2023-01-02 22:43 ` Steve Nickolas
2023-01-02 21:08 ` Joseph Holsten
2023-01-02 21:15 ` Adam Thornton
2023-01-02 17:55 ` Adam Thornton
2023-01-02 18:11 ` Clem Cole
2023-01-02 18:36 ` Dan Cross
2023-01-02 18:48 ` Dan Cross
2023-01-02 18:18 ` Larry McVoy
2023-01-04 3:20 ` John Cowan
2023-01-04 3:31 ` Dan Cross
2023-01-04 4:16 ` Bakul Shah
2023-01-04 16:15 ` Dan Cross
2023-01-04 18:28 ` ron minnich
2023-01-04 19:33 ` Chet Ramey
2023-01-04 15:21 ` Ralph Corderoy
2023-01-04 15:54 ` Ron Natalie
2023-01-02 17:55 ` Clem Cole
2023-01-03 17:08 ` Paul Winalski
2023-01-03 19:19 ` Warner Losh
2023-01-03 19:56 ` Luther Johnson
2023-01-03 20:21 ` Dave Horsfall
2023-01-03 21:47 ` Clem Cole
2023-01-03 21:51 ` Clem Cole
2022-12-31 4:41 ` Greg 'groggy' Lehey
2022-12-30 20:20 ` Sven Mascheck
2022-12-30 20:49 ` Ron Natalie
2022-12-30 20:52 ` Rob Pike
2022-12-30 20:53 ` Jon Steinhart
2023-01-01 10:44 ` arnold
2023-01-01 11:28 ` arnold
2023-01-03 16:34 ` Chet Ramey
2023-01-03 15:06 ` Chet Ramey
2022-12-30 19:57 ` segaloco via TUHS
2022-12-31 12:55 ` Paul Ruizendaal
2023-01-01 2:55 ` Warner Losh
2023-01-01 4:38 ` Jonathan Gray
2023-01-01 5:25 ` Warner Losh
2023-01-01 5:35 ` Dan Cross
2023-01-01 5:52 ` G. Branden Robinson
2023-01-01 6:35 ` Warner Losh
2023-01-01 6:35 ` Rob Pike
2023-01-01 6:27 ` Warner Losh
2023-01-01 14:50 ` Ron Natalie
2023-01-01 7:11 ` Jonathan Gray
2023-01-01 7:21 ` Warner Losh
2023-01-01 10:25 ` Paul Ruizendaal
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=bf914d26-8746-7cf3-1e3d-eb3b3c07c37e@gmail.com \
--to=alx.manpages@gmail.com \
--cc=athornton@gmail.com \
--cc=crossd@gmail.com \
--cc=douglas.mcilroy@dartmouth.edu \
--cc=tuhs@tuhs.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).