[OT] writing filters in sh
Chip Camden
sterling at camdensoftware.com
Thu Oct 28 17:49:09 UTC 2010
Quoth Polytropon on Thursday, 28 October 2010:
> On Thu, 28 Oct 2010 09:17:12 -0700, Chip Camden <sterling at camdensoftware.com> wrote:
> > Perhaps someone with more sh fu can transform the
> > 'if' paragraph into a one-liner at least. When I tried to do so, I got an
> > unexpected ; error.
>
> Not tested, but this should do the trick:
>
> #!/bin/sh
> if [ $# -ge 1 ] && ( exec cat $@ | $0; exit )
> while read data; do echo $data; done
>
> The ; denotes a line break, means that you can use EITHER ; or
> a newline. In the original construct,
>
> if [ $# -ge 1 ]; then
> exec cat $@ | $0
> exit
> fi
>
> you can change the ; into
>
> if [ $# -ge 1 ]
> then
> exec cat $@ | $0
> exit
> fi
>
> which is often seen in scripts. In this case, no ; is required (or
> even allowed). The same rule applies for the while/do/done iterator.
>
>
> --
> Polytropon
> Magdeburg, Germany
> Happy FreeBSD user since 4.0
> Andra moi ennepe, Mousa, ...
> _______________________________________________
> freebsd-questions at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-questions
> To unsubscribe, send any mail to "freebsd-questions-unsubscribe at freebsd.org"
Tested, and it had a bug ('if' is extraneous). It also waits for input
even if it has file arguments. But it's easily corrected:
#!/bin/sh
[ $# -ge 1 ] && exec cat $@ && exit | $0
while read data; do echo $data; done
The first line can be converted to an alias, like so:
alias inargs='[ $# -ge 1 ] && exec cat $@ && exit | $0'
So, if you add the alias to your profile, you can use it to enable the
behavior in any script:
#!/bin/sh
inargs
while read data; do echo $data; done
Thanks for the pointer in the right direction.
--
Sterling (Chip) Camden | sterling at camdensoftware.com | 2048D/3A978E4F
http://camdensoftware.com | http://chipstips.com | http://chipsquips.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-questions/attachments/20101028/e28d76ca/attachment.pgp
More information about the freebsd-questions
mailing list