web-dev-qa-db-ja.com

文字列、ファイル、プログラム出力をBashで連結する

私の場合、ユースケースは、最小化される前のCSSファイルの連結です。 2つのCSSファイルを連結するには:

_cat 1.css 2.css > out.css
_

1つのシングルの位置にテキストを追加するには、次のようにします。

_cat 1.css <<SOMESTUFF 2.css > out.css
This will end in the middle.
SOMESTUFF
_

oneの他のプログラムからSTDOUTを追加するには:

_sed 's/foo/bar/g' 3.css | cat 1.css - 2.css > out.css
_

ここまでは順調ですね。しかし、私は定期的に、several文字列、ファイル、さらには著作権ヘッダー、sed(1) 等々。順序を自由に選択できるようにしながら、可能な限り小さなステップと一時ファイルでそれらを連結したいと思います。

要するに、私はこれをBashで可能な限り少ないステップで実行する方法を探しています。

_command [string|file|output]+ > concatenated
# note the plus ;-) --------^
_

(基本的に、複数のSTDINを処理するにはcatがあれば十分だと思います。

_<(echo "FOO") <(sed ...) <(echo "BAR") cat 1.css -echo1- -sed- 2.css -echo2-
_

しかし、どうすればそれらにアクセスできるのかわかりません。)

20
Boldewyn

これは機能します:

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

ファイルにリダイレクトされるサブシェルにすべてのコマンドを追加できます。

(
    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

(これにより、ファイルが繰り返し開いたり閉じたりする可能性があります)

17
Joni

できるよ:

echo "$(command 1)" "$(command 2)" ... "$(command n)" > outputFile
14
nhahtdh