在我的情况下,用例是CSS文件连接,在它被最小化之前。连接两个CSS文件:
cat 1.css 2.css > out.css
要在一个位置添加一些文字,我可以
cat 1.css <<SOMESTUFF 2.css > out.css
This will end in the middle.
SOMESTUFF
从一个其他程序添加STDOUT:
sed 's/foo/bar/g' 3.css | cat 1.css - 2.css > out.css
到目前为止一切顺利。但我经常遇到这种情况,我需要将几个字符串,文件甚至程序输出混合在一起,例如版权标题,由sed(1)
预处理的文件等。我希望尽可能简单地将它们连接在一起,只需要很少的步骤和临时文件,同时可以自由选择订单。
简而言之,我正在寻找一种方法,以尽可能少的步骤在Bash中执行此操作:
command [string|file|output]+ > concatenated
# note the plus ;-) --------^
(基本上,让cat
处理多个STDIN就足够了,我想,就像
<(echo "FOO") <(sed ...) <(echo "BAR") cat 1.css -echo1- -sed- 2.css -echo2-
但是我没有看到,我怎么能访问它们。)
答案 0 :(得分:25)
这有效:
cat 1.css <(echo "FOO") <(sed ...) 2.css <(echo "BAR")
答案 1 :(得分:16)
您可以在子shell中添加所有命令,这些命令会重定向到文件:
(
cat 1.css
echo "FOO"
sed ...
echo BAR
cat 2.css
) > output
您还可以使用>>
附加到文件。例如:
cat 1.css > output
echo "FOO" >> output
sed ... >> output
echo "BAR" >> output
cat 2.css >> output
(这可能会反复打开和关闭文件)
答案 2 :(得分:13)
你可以这样做:
echo "$(command 1)" "$(command 2)" ... "$(command n)" > outputFile