【问题标题】:AWK error when starting as a particular user以特定用户身份启动时出现 AWK 错误
【发布时间】:2018-10-04 10:27:45
【问题描述】:

我正在使用 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”时才会出现错误,请帮忙。

【问题讨论】:

    标签: linux awk su


    【解决方案1】:

    su 调用删除了一层 shell 引用,并扩展了 $0。 awk 可能会使用这些参数调用:

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

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

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

    【讨论】:

    • 您好,感谢您的回复。当我读到您的评论时,这是有道理的,但是由于某些奇怪的原因,我遇到了一个新错误。 这是修改后的命令: /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: (FILENAME=- FNR=1) fatal: 除零尝试
    • 新的错误是什么?哦,让我猜猜,我错过了$0
    • 我认为\$0 也应该解决这个问题。
    • 非常感谢。我几乎花了一周的时间试图解决这个问题并尝试了所有可能的解决方案。有用。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-25
    • 1970-01-01
    • 2011-08-20
    • 1970-01-01
    • 1970-01-01
    • 2016-10-15
    • 1970-01-01
    相关资源
    最近更新 更多