我使用的是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'时,才会发生错误。
答案 0 :(得分:1)
su
调用删除了一层外壳引号,并扩展了$0
。使用以下参数可能会调用awk:
awk '{ print strftime(%F %T), /bin/sh; fflush(); }'
为防止这种情况,您需要在原始命令行中引用"
和$
字符,如下所示:
…| awk '{ print strftime(\"%F %T\"), \$0; fflush(); }' |…