bashスクリプトのC ++ system()はatとは異なります。

bashスクリプトのC ++ system()はatとは異なります。

C++ スクリプトは次のようにコンパイルされます。g++ -std=c++11

   #include <iostream>

    int main() {
        system("./temp.bash");
    }

バッシュスクリプト

    TIME="now +1 minutes"
    STRING="Output File Test 7 SUCCESS!!!"
    echo -e "echo \"$STRING\" >> output.txt
    <EOT>" | at $TIME

<EOT>文字 \x04 を表します。

C++では、最後の行は次のようになります。"echo -e \"echo \\\"$STRING\\\" >> output.txt\n\x04\" | at $TIME"

./temp.bash2つの呼び出し方法(コンパイルされたC ++スクリプト呼び出しとコマンドラインからの直接呼び出し)の違いは、C ++から呼び出されたときにフラグ-e/atjobsファイルの行の先頭に書き込まれることです。

これはバグのようです。なぜこれが起こるのですか?

ベストアンサー1

echo移植性がありません。組み込みバイナリとシステムバイナリbashは異なります。私たちが観察した通貨やその他の状況の複雑さを排除します。echo/bin/echoat

$ sh -c 'echo -e "echo hi"'
-e echo hi
$ bash -c 'echo -e "echo hi"'
echo hi
$ bash -c '/bin/echo -e "echo hi"'
-e echo hi
$ 

systemC ++(またはC)からの呼び出し(shおそらく)には組み込み関数がないので、echoシステムを使用してそのまま印刷してください。システムはそれが何であるか分からないからです。システム経由で使用する場合も同様です。より良い移植性を考慮したり、厄介な呼び出しを避けたり、分岐/実行して直接作成したりできます。/bin/echo-eecho-ebash/bin/echoprintfshat

おすすめ記事