Concatenate strings, files and program output in Bash

bash, concatenation, stdout

Solution

This works:

cat 1.css <(echo "FOO") <(sed ...) 2.css <(echo "BAR")

Problem

The use case is, in my case, CSS file concatenation, before it gets minimized. To concat two CSS files: ``` cat 1.css 2.css > out.css ``` To add some text at one single position, I can do ``` cat 1.css <<SOMESTUFF 2.css > out.css This will end in the middle. SOMESTUFF ``` To add STDOUT from one other program: ``` sed 's/foo/bar/g' 3.css | cat 1.css - 2.css > out.css ``` So far so good. But I regularly come in situations, where I need to mix several strings, files and even program output together, like copyright headers, files preprocessed by `sed(1)` and so on. I'd like to concatenate them together in as little steps and temporary files as possible, while having the freedom of choosing the order. In short, I'm looking for a way to do this in as little steps as possible in Bash: ``` command [string|file|output]+ > concatenated # note the plus ;-) --------^ ``` (Basically, having a `cat` to handle multiple STDINs would be sufficient, I guess, like ``` <(echo "FOO") <(sed ...) <(echo "BAR") cat 1.css -echo1- -sed- 2.css -echo2- ``` But I fail to see, how I can access those.)

Original source