Skip to content
This repository was archived by the owner on Apr 26, 2024. It is now read-only.
This repository was archived by the owner on Apr 26, 2024. It is now read-only.

bash read multi-line string with Process Substitution #144

@georgalis

Description

@georgalis

I would like to read a multi-line string, with proper exit code.
Here Document, and Here String methods are not optimal,
for performance, Process Substitution is desired, eg

IFS= read -d "" lines < <(printf "one \ntwo \nthree \n") && echo success || echo error

"works" however it returns an error status.

The following reads the string as expected, with an exit status 0, GNU bash, version 5.2.15(1)-release

eot="$(awk 'BEGIN{printf "%c",4}')"
IFS= read -d "$eot" lines < <(printf "one \ntwo \nthree \n${eot}")
echo "$lines"
one
two
three

Two issues here, 1) the awk statement is the only way I know to reference the ascii EOT character (od could probably work too). Is there any builtin method to generate characters from their numeric equivalent? 2) Shouldn't read have an option to gracefully complete the read, on end-of-transmission, or end of file (ie, the first example)? Typically it would be inconvenient (and with performance impact) to inject this ${eot} with my Process Substitution. I am inclined to simply ignore the exit status. Is there a better option?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions