23

在我的例子中,用例是 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-

但我看不到,我如何才能访问这些。)

4

3 回答 3

30

这有效:

cat 1.css <(echo "FOO") <(sed ...) 2.css <(echo "BAR")
于 2012-06-08T11:29:27.947 回答
18

你可以做:

echo "$(command 1)" "$(command 2)" ... "$(command n)" > outputFile
于 2012-06-08T11:16:04.130 回答
17

您可以在子shell 中添加所有命令,该子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

(这可能会重复打开和关闭文件)

于 2012-06-08T11:19:37.810 回答