From mboxrd@z Thu Jan 1 00:00:00 1970 From: tytso at mit.edu (Theodore Y. Ts'o) Date: Thu, 5 Jul 2018 20:52:46 -0400 Subject: [COFF] Other OSes? In-Reply-To: <82df833ae2a587b386b4154fc6051356a3510b19@webmail.yaccman.com> References: <82df833ae2a587b386b4154fc6051356a3510b19@webmail.yaccman.com> Message-ID: <20180706005246.GA28138@thunk.org> On Thu, Jul 05, 2018 at 01:49:58PM -0700, Steve Johnson wrote: > My two examples of this are editor scripts and shell scripts.   In > the day, I would write at least one shell script and several editor > scripts a day.  Most of them were 2-4 lines long and used once.  But > they allowed operations to be done on multiple files quite quickly and > safely. Before making such generalizations, I think it's wise to state more clearly what you have in mind when you say "shell script". I use shell scripts all the time, but they tend to be for simple things that have control statements, and thus are not 2-4 lines long, and they aren't use-just once sort of things. For example, my "do-suspend script": #!/bin/bash if [[ $EUID -ne 0 ]]; then exec sudo /usr/local/bin/do-suspend fi /usr/bin/xflock4 sleep 0.5 echo deep > /sys/power/mem_sleep exec systemctl suspend I use this many times a day, and shell script was the right choice, as it was simple to write, simple to debug, and it would have been more effort to implement it in almost any other language. (Note that I needed to use /bin/bash instead of a PODIX /bin/sh because I needed access to the effective uid via $EUID.) Your definition of "shell scripts" and "editor scripts" that have disappear seem to be one-off things. For me, those have been replaced by command-line history and command-line editing in the shell, and as far as one-off editor scripts, I use emacs's keyboard macro facility, which is faster (for me) to set up than editor scripts. > With the advent of glass teletypes, shell scripts simply evaporated -- > there was no equivalent.  (yes, there were programs like sed, but it > wasn't the same...).  Changing, e.g., a function name in 10 files > got a lot more tedious. So here's the thing, with emacs's keyboard macros, it's actually not tedious at all. That's why I use them instead of editor scripts! Granted, somewhere starting around 10 files I'll probably end up breaking out some emacs-lisp for forther automation, but for a small number of files, using file-name completionm and then using a handful of control characters per file to kick off the keyboard macros a few hundred times (C-u C-u C-u C-u C-u C-x C-e) ends up being faster to type than consing up a one-off shell or editor script. (Because, basically, an emacs keyboard macro really *is* an editor script!) > What abstraction mechanisms might we add back to Unix to fill these > gaps? What do you mean by "Unix"? Does using /bin/bash for my shell scripts count as Unix? Or only if I strict myself to a strict Unix V9 or POSIX subset? Does using emacs count as "Unix"? What about perl? Or Python? Personally I all consider this "Unix", or at least "Linux", and they are are additoinal tools which, if learned well, are far more powerful than the traditional Unix tools. And the nice thing about Linux largely dominating the "Unix-like" world is for the most part, I don't have to worry about backwards compatibility issues, at leasts for my personal usage. For scripts that I expect other people to use, I still have the reflex of doing things as portability as possible. So for example, consider if you will, mk_cmds and its helper scripts, which is part of a port of Multics's SubSystem facility originated with Kerberos V5, and is now also part of ext2/3/4 userspace utilities: https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git/tree/lib/ss/mk_cmds.sh.in https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git/tree/lib/ss/ct_c.sed https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git/tree/lib/ss/ct_c.awk My implementation of mk_cmds was designed for ultra-portability (as in, it would behave identically on Mac's AUX, IBM's AIX, Solaris (with either a SunSoft or GNU toolchain), OSF/1, Linux, etc.). To do this, the above scripts use a strict subset of POSIX defined syntax and behaviours. And it's a great use of shell, sed, and awk scripts, precisely because they were available everywhere. The original version of mk_cmds was implemented in C, Yacc, and Lex, and the problem was that (a) this got complicated when cross compiling, where the Host != Target architecture, and (b) believe it or not, Yacc and Lex are not all that standardized across different Unix/Linux systems. (Between AT&T's Yacc, Berkeley Yacc, and GNU Bison, portability was a massive and painful headache.) So I solved both problems by taking what previously had been done in C, Yacc, and Lex, and using shell, sed, and awk isntead. :-) - Ted