C++ 脚本,编译为g++ -std=c++11
#include <iostream>
int main() {
system("./temp.bash");
}
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.bash
两种调用方法(通过调用已编译的 C++ 脚本与直接从命令行调用)之间的区别在于,通过 C++ 调用时-e
,标志会写入/atjobs
文件的行首。
这似乎是一个错误。为什么会出现这种情况?
答案1
echo
不可携带;内置与系统二进制文件bash
不同。消除了通话的复杂性以及我们观察到的其他情况echo
/bin/echo
at
$ 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
$
system
C++(或 C)中的 调用(sh
可能)没有内置函数,因此使用echo
系统并按原样打印 ,因为该系统不知道是什么。通过系统使用时的情况相同。您可能会考虑更好的可移植性,或者避免尴尬的调用,而只是 fork/exec 并直接写入。/bin/echo
-e
echo
-e
bash
/bin/echo
printf
sh
at