これは私の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
。