
これは私の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
それは同じです。