Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: cat as a builtin command
- X-seq: zsh-users 19047
- From: Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx>
- To: Han Pingtian <hanpt@xxxxxxxxxxxxxxxxxx>, zsh-users@xxxxxxx
- Subject: Re: cat as a builtin command
- Date: Mon, 01 Sep 2014 11:39:40 -0700
- In-reply-to: <20140901075315.GA5908@localhost.localdomain>
- List-help: <mailto:zsh-users-help@zsh.org>
- List-id: Zsh Users List <zsh-users.zsh.org>
- List-post: <mailto:zsh-users@zsh.org>
- Mailing-list: contact zsh-users-help@xxxxxxx; run by ezmlm
- References: <BLU436-SMTP2045383EF41756D3376DB3CF4DB0@phx.gbl> <20140901075315.GA5908@localhost.localdomain>
On Sep 1, 3:53pm, Han Pingtian wrote:
}
} It should be
}
} exec {file}<&0
}
} right? But I get error mesage for it:
}
} localhost% (){
} function> local fd
} function> exec {fd}<&0
} function> read -E -u $fd
} function> exec {fd}<&-
} function> }
} (anon):2: 0: bad file descriptor
} (anon):read:3: argument expected: -u
} (anon):4: failed to close file descriptor 0: bad file descriptor
I'm not able to reproduce this. Is this in a newly started shell?
torch% (){
local fd
function> exec {fd}<&0
function> read -E -u $fd
function> exec {fd}<&-
function> }
hello
hello
torch%
I *suspect* that what happened is that while you were experimenting, some
previous "exec <&-" has already closed descriptor 0. Closing stdin is
not fatal to an interactive zsh, it maintains its own descriptor for ZLE
to access /dev/tty.
E.g., if I explicitly do:
torch% exec 0<&-
Then up-history a couple of times and:
torch% (){
local fd
exec {fd}<&0
read -E -u $fd
exec {fd}<&-
}
(anon):2: 0: bad file descriptor
(anon):read:3: argument expected: -u
(anon):4: failed to close file descriptor 0: bad file descriptor
torch%
What's puzzling to me is why line 4 says "0: bad file descriptor" rather
than this:
torch% exec {fd}<&-
zsh: parameter fd does not contain a file descriptor
It appears that only an UNSET parameter name triggers the "does not
contain" error; a set-but-empty parameter is treated as 0 and closes
standard input, which is likely how you got into this situation.
Messages sorted by:
Reverse Date,
Date,
Thread,
Author