以特定用户身份启动时出现AWK错误

时间:2018-10-04 10:27:46

标签: linux awk su

我使用的是YOCTO Linux,目前只有一个用户“ root”。 我有一个脚本,可以在开机时运行进程。

要求根据用户动态创建日志文件夹,并找到解决方案(来自stackoverflow)以如下方式运行模块

/bin/su -c "/usr/local/bin/TestApplication &" - root 

上面的方法没有问题,并且也可以按预期创建文件夹。

现在,当我添加“ AWK”命令以将日期和时间添加到过程输出时,出现错误

使用的命令

/bin/su -c "/usr/local/bin/TestApplication 2>&1| awk '{ print strftime("%F %T"), $0; fflush(); }' | tee /home/TestApplication.txt &" - root 

错误消息:

awk: cmd. line:1: { print strftime(%F %T),/usr/local/bin/TestApplication_script;fflush();}
awk: cmd. line:1:                  ^ syntax error

如果使用这种方式则没有错误:

/usr/local/bin/TestApplication 2>&1| awk '{print strftime("%F %T"),$0;fflush();}' | tee /home/TestApplication.txt &

因此,仅当我尝试使用'/ bin / su -c'时,才会发生错误。

1 个答案:

答案 0 :(得分:1)

su调用删除了一层外壳引号,并扩展了$0。使用以下参数可能会调用awk:

awk '{ print strftime(%F %T), /bin/sh; fflush(); }'

为防止这种情况,您需要在原始命令行中引用"$字符,如下所示:

…| awk '{ print strftime(\"%F %T\"), \$0; fflush(); }' |…