「cat」コマンドをフォークするにはどうすればいいですか?

「cat」コマンドをフォークするにはどうすればいいですか?

これは私のbashスクリプトです。

#!/bin/bash
oo="`cat /etc/httpd/conf/httpd.conf`";
cat > /a.txt << EOF
$oo
EOF

単に /etc/httpd/conf/httpd.conf を読み取り、それを /a.txt に書き込むだけですが、問題は、これを sudo コマンドを使用して Web スクリプト経由で実行した場合に発生します。何らかの理由で、すべてが a.txt ファイルに書き込まれるわけではありません。

しかし、コマンドラインで実行すると、すべてがa.txtに正常に書き込まれます。

したがって、次を追加して、これをバックグラウンド プロセスに送信する必要があります。

> /dev/null 2>&1

それに。しかし、どうすればいいのでしょうか?私は試してみました

#!/bin/bash
oo="`cat /etc/httpd/conf/httpd.conf`";
cat > /a.txt << EOF
$oo
EOF > /dev/null 2>&1

これは機能しませんでした。

答え1

この例は非常に単純化されているかもしれませんが、次のように実行しない理由がわかりません。

cp /etc/httpd/conf/httpd.conf /a.txt

つまり、あるファイルから読み取ってその内容で別のファイルを作成するだけのコマンドが既に存在しており、これは と呼ばれますcp。唯一の違いは、/a.txtが既に存在していて、その権限などを保持しようとしている場合ですが、その場合でも、次のようにするだけです。

cat /etc/httpd/conf/httpd.conf >/a.txt

答え2

HERE-DOC を含むコマンドをバックグラウンドで実行するには、&最初の行に次のように指定します。

command << EOF &
blah blah
EOF

この特定のケースでは、何がポイントなのかわかりません。すでに stdout を a.txt にリダイレクトしているのに、なぜ同時に /dev/null にリダイレクトするのでしょうか?

答え3

次のようにするべきだと思います:

cat </etc/httpd/conf/httpd.conf >/a.txt

いくら試しても、質問のコードが他の効果をもたらすとは思えません。

次の場合:

cat <file 

...または...

cat <<FILE
    $(shell generated file contents)
FILE

catの標準入力を標準出力にコピーするだけです。つまり、このシナリオでは次のようになります。

<<FILE
    `cat <file`
FILE

<<FILE同一です<file

関連情報