On Mon, May 21, 2018 at 10:12:43AM -0400, Chet Ramey wrote: > On 5/20/18 10:21 PM, PePa wrote: > > I would like to do something like this, where output gets redirected > > into a variable: > > > > some-command >>> variablename1 2>>>variablename2 > > > > command-with-many-output-descriptors >>> var1 3>>> var3 4>>> var4 > > > > The idea is not needing files to be created but to just use memory. Half > > a year ago I posted this idea here, but didn't get any reply, maybe this > > isn't the right place? Am I blacklisted?? > > It's not possible, in general, to open a file descriptor to an arbitrary > block of memory, especially given file descriptor inheritance between > processes. > > What you're asking for is syntactic sugar for: > > some-command > temp-file > echo '#' >> temp-file > variablename=$(< temp-file) > rm -f temp-file > variablename=${variablename%?} > > I would look at a sample implementation, possibly using mmap, if someone > did one.
More generally, I think he's looking for syntactic sugar to replace: unset tmpfile tmpfile[2]=$(mktemp) tmpfile[3]=#(mktemp) ... some-command 2>"${tmpfile[2]}" 3>"${tmpfile[3]}" ... echo '#' >>"${tmpfile[2]}" echo '#' >>"${tmpfile[3]}" ... var2=$(<"${tmpfile[2]}") var2=${var2%?} var3=$(<"${tmpfile[3]}") var3=${var3%?} ... rm -rf -- "${tmpfile[@]}" (Plus appropriate EXIT trap hook-adding-and-removing infrastructure.) (Plus adding the missing mktemp command for most platforms.)