>From: Stroller <MacMonster at myrealbox.com> >Subject: Re: [X-Unix] rsync & ssh >Date: Thu, 8 Jul 2004 00:07:21 +0100 > >On Jul 7, 2004, at 12:07 pm, David Ledger wrote: >>> From: Stroller <MacMonster at myrealbox.com> >>> Unix is *horribly* obscure & complex, and for no good reason other >>> than >>> compatibility with legacy systems. >> Not sure what you mean here. I can't think of any legacy systems it's >> particularly compatible with. > >Well, what I mean is basically that Unix stays horribly obscure & >complicated in in order to remain compatible with Unix. So really you're complaining that Unix still exists, and hasn't been replaced with a new OS with similar internals and different CLI utilities. >`ls -l foo` means "show full details of the file foo" >`ls -l -R` means "show full details of all the files in the directory & >all directories below it" > >`grep foo bar` means "look for foo in the file bar" >`grep -R bar` means "look (recursively?) for bar on standard input" Yes, but recursive is redundant for stdin. The '-' indicates a flag, and would be just as valid in the first version provided 'bar' were a directory. I don't see a problem here. You have to think about how a utility writer is going to get the info it needs from you. 'ls' and 'grep' both work on multiple files/directories. The only place on a command line you can put a variable length list without adding other markers is at the end. Optional flags and flags with arguments come at the beginning. The presence of the '-' means the utility code can distinguish between flags and main arguments. From the 'grep' manpage: grep [options] PATTERN [FILE...] grep [options] [-e PATTERN | -f FILE] [FILE...] There is only one word allowed for 'PATTERN'. As the code scans its args list left to right, once it's seen a 'PATTERN' word, the rest specify files to operate on (or stdin if none). This is exactly the same as for 'ls' except that 'ls' only needs flags and filenames (directories being a type of file), nothing like 'PATTERN'. >So to show full details of the file "-R" we use `ls -l -- -R` >But to look for the expression "-R" in the file bar we use `grep -e -R >bar` Under the old versions of Unix (the ones you were complaining we have to be compatible with :-) ), '--' meant nothing, or possibly a flag called '-'. The first time I met '--' was under Linux. It's not normally used in mainstream Unix AFAIK, certainly not HP-UX. Doing an 'ls -l' on a file called '-R' was only a problem if you were stupid enough to create a file called '-R'. Users knew not to do that or live with the consequences. If you had to, you'd do 'ls -l x -R' and ignore the line complaining that 'x' was not found. 'x' is one less keystroke than '--'. >`tar` requires the -f flag to indicate that the following argument is >the name of a file on which to operate, whereas the file to operate on >is always the last argument to the `gzip` command. You're seeing it backwards. 'tar' is just the same as the above. The files it operates on are those after the flags (or keys as real tar call them - a block of chars specifying what to do is _required_, and so no '-' is needed to introduce them). If the key includes c, a, r, u ... those files listed at the end of the line are put together in an archive. If the key includes x (or t), files with the names specified at the end of the line are extracted (or metadata listed) from an archive, the default being "all". The '-f <filename>' is optional, the default being the first tape device. The items to operate on (archive) must be supplied. This is confused on OSX because OSX 'tar' is actually 'gnutar', which is not Unix (GNU = Gnu's Not Unix), so the problem comes from not sticking with the old :-). >Unix would be less >horribly complicated, quicker to learn for beginners & handier for >experienced users alike, if flags were standardised and some of these >anomalies revised, however some overnight "standardisation" would break >every shell-script on the planet. There are only 26 * 2 letters to use as flags and at least ten times that many options to specify with them. Some sites use both new and ten year old boxes with current and ten year old OS revisions together, running common scripts on both. Y2K reduced this, but we'll have HP-UX 10.20 (unsupported for a year now) from the mid 90s still running in 2010 because of discontinued s/w products. and At 5:58 am -0700 8/7/2004, Stroller <MacMonster at myrealbox.com>: >I would regard there to be something inherently legacy about a >command-line for which many of the principal tools are still called >according to the whims of the authors who conceived them twenty or >thirty years ago. The only computer thing I've seen that uses meaningful names was COBOL. The naming of 'grep', 'awk', 'tar' may seem odd to newcomers, but what would you call them so that new users would know what they do from the name? and At 5:58 am -0700 8/7/2004, Brian Medley <bpm-list-osx-unix at 4321.tv>: >It would not have to break every shell script. For example, the >behavior of some versions Solaris depends on your path. The behavior of _all_ versions of Unix depends on your PATH. David -- David Ledger - Freelance Unix Sysadmin in the UK. Chair of HPUX SysAdmin SIG of hpUG technical user group (www.hpug.org.uk) dledger at ivdcs.co.uk (also dledger at ivdcs.demon.co.uk) www.ivdcs.co.uk