eeeks! that's is pure __evil__!
Yes I agree with this, but...
consider i have many, many programs which do things like
convert infile outfile
convert - outfile # infile on stdin
convert infile - # outfile on stdout
convert - - # infile on stdin, outfile on stdout
convert --infiles=- # list of infiles on stdin, auto-name outfiles
this is standard unix practice (do a man on gzip, tar, etc).
Standard but by no means universal. For example the mysql command
doesn't use or like it:
rick@frodo:/public/rubyscripts$ mysql -p -
Enter password:
ERROR 1049 (42000): Unknown database '-'
It either tries to use - as the database name or:
rick@frodo:/public/rubyscripts$ mysql -p depot_development -
mysql Ver 14.12 Distrib 5.0.22, for pc-linux-gnu (i486) using readline 5.1
...
Usage: mysql [OPTIONS] [database]
It tells me that I don't know the right syntax.
I don't think that it has been mentioned here that one reason for
detecting what's connected to stdin/stdout is useful when a tool
want's to have interactive and non-interactive modes:
Here's mysql in non-interactive mode:
rick@frodo:/public/rubyscripts$ echo "describe products;" | mysql -p
depot_development
Enter password:
Field Type Null Key Default Extra
id int(11) NO PRI NULL auto_increment
title varchar(255) YES NULL
description text YES NULL
image_url varchar(255) YES NULL
price decimal(8,2) YES 0.00
rick@frodo:/public/rubyscripts$
And here it is in interactive mode:
rick@frodo:/public/rubyscripts$ mysql -p depot_development
Enter password:
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5691 to server version:
5.0.22-Debian_0ubuntu6.06-log
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> describe products;
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| title | varchar(255) | YES | | NULL | |
| description | text | YES | | NULL | |
| image_url | varchar(255) | YES | | NULL | |
| price | decimal(8,2) | YES | | 0.00 | |
+-------------+--------------+------+-----+---------+----------------+
5 rows in set (0.01 sec)
mysql>
Note that it not only puts out prompts but it changes the output to
be for human rather than computer consumption.
auto-munging of ARGV is a bad idea imho.
I agree but for other reasons.
As for programs hanging if you do
program &
Well, that's really a user error, and maybe even not that, maybe I
want to suspend program and then use fg to resume it.
And - doesn't really help this. I think that it's better in most
cases to solve it the other way around with something like
program </dev/null &