mirror of
https://github.com/zsh-users/zsh
synced 2024-09-30 05:06:09 +00:00
32 lines
972 B
Bash
32 lines
972 B
Bash
#!/bin/zsh -f
|
|
|
|
# Read stdin verbatim and as efficiently as possible into $REPLY,
|
|
# stopping without any change to $REPLY in the event of any error.
|
|
# Benchmarked by Roman Perepelitsa in zsh-users/29472
|
|
|
|
# Although this function faithfully records the input stream, later
|
|
# references to $REPLY with the multibyte option back in effect will
|
|
# (re-)interpret the content as multibyte characters. This may not be
|
|
# what is desired.
|
|
|
|
emulate -L zsh -o no_multibyte
|
|
|
|
### Alternate formulation, faster on bigger files
|
|
# # /dev/fd/0 is treated specially by -f so also check /dev/fd
|
|
# if [[ -d /dev/fd && -f /dev/fd/0 ]] && zmodload zsh/mapfile
|
|
# then
|
|
# local +h -Ar mapfile
|
|
# typeset -g REPLY="${mapfile[/dev/fd/0]}" && return
|
|
# fi
|
|
# # else fall through to read from pipe/socket
|
|
|
|
zmodload zsh/system || return
|
|
local -a content
|
|
local -i i=0
|
|
while true; do
|
|
sysread 'content[++i]' && continue
|
|
(( $? == 5 )) || return
|
|
break
|
|
done
|
|
typeset -g REPLY=${(j::)content}
|