On Mon, Feb 12, 2024 at 11:01:47PM -0600, David Wright wrote: > … but not much. For me, "standard output" is /dev/fd/1, yet it seems > unlikely that anyone is going to use >&1 in the manner of the example.
Standard output means "whatever file descriptor 1 points to". That could be a file, a pipe, a terminal (character device), etc. > I might write something like: "The option ‘-’ shreds the file specified > by the redirection ‘>&N’", though there could be a better name for ‘>&N’. You're assuming the program will be used from a shell. This is *usually* going to be true, but nothing prevents you from writing a C program which closes stdout, opens a file, ensures that it's using FD 1, and then calls "shred -". The documentation has to support this use case as well. > > A FILE of ‘-’ denotes standard output. The intended use of this is > > to shred a removed temporary file. For example: > > > > i=$(mktemp) > > exec 3<>"$i" > > rm -- "$i" > > echo "Hello, world" >&3 > > shred - >&3 > > exec 3>- > > I can see that the last line truncates the "anonymous" file, No, that's not what it does at all. In fact, that last line is written incorrectly. It should say "exec 3>&-" and what that does is close file descriptor 3, which was previously opened on line 2. What it actually does *as written* is create/truncate a file whose name is "-", close the previously opened FD 3, and make FD 3 point to the file named "-". unicorn:~$ exec 3>- unicorn:~$ ls -ld -- - -rw-r--r-- 1 greg greg 0 Feb 13 07:12 - unicorn:~$ ls -l /dev/fd/3 l-wx------ 1 greg greg 64 Feb 13 07:12 /dev/fd/3 -> /home/greg/- This is an obvious bug in the info page. I wonder how many years this has gone unnoticed.