•  


bash read multi-line string with Process Substitution · Issue #144 · dylanaraps/pure-bash-bible · GitHub
Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

bash read multi-line string with Process Substitution #144

Open
georgalis opened this issue Dec 21, 2023 · 1 comment
Open

bash read multi-line string with Process Substitution #144

georgalis opened this issue Dec 21, 2023 · 1 comment

Comments

@georgalis
Copy link

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?

@andry81
Copy link

andry81 commented Dec 22, 2023

@georgalis

https://linuxcommand.org/lc3_man_pages/readh.html

 -d delim	continue until the first character of DELIM is read, rather
  	than newline

Exit Status:
The return code is zero, unless end-of-file is encountered, read times out
(in which case it's greater than 128), a variable assignment error occurs,
or an invalid file descriptor is supplied as the argument to -u.

The return code is not zero because the end-of-file is reached. The end-of-line is reached first because the delimiter is not found first.

This is by design. Why to bother?

Sign up for free to subscribe to this conversation on GitHub . Already have an account? Sign in .
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants
- "漢字路" 한글한자자동변환 서비스는 교육부 고전문헌국역지원사업의 지원으로 구축되었습니다.
- "漢字路" 한글한자자동변환 서비스는 전통문화연구회 "울산대학교한국어처리연구실 옥철영(IT융합전공)교수팀"에서 개발한 한글한자자동변환기를 바탕하여 지속적으로 공동 연구 개발하고 있는 서비스입니다.
- 현재 고유명사(인명, 지명등)을 비롯한 여러 변환오류가 있으며 이를 해결하고자 많은 연구 개발을 진행하고자 하고 있습니다. 이를 인지하시고 다른 곳에서 인용시 한자 변환 결과를 한번 더 검토하시고 사용해 주시기 바랍니다.
- 변환오류 및 건의,문의사항은 juntong@juntong.or.kr로 메일로 보내주시면 감사하겠습니다. .
Copyright ⓒ 2020 By '전통문화연구회(傳統文化硏究會)' All Rights reserved.
 한국   대만   중국   일본