awk命令变量NF不在NULL输入上工作

时间:2014-04-04 07:50:05

标签: bash shell

我运行我的安全shell脚本以确保二进制文件正在运行

检查二进制文件是否正在运行我执行以下命令

pidof prog.bin | awk '{print NF}'

是一些系统,它在二进制文件未运行时给我0 和 在某些系统中它给我NULL(没有)

我可以使用-z选项检查NULL,但为什么awk命令以这种方式运行?

6 个答案:

答案 0 :(得分:1)

您可以使用以下pidof代替:

pgrep -qf prog.bin

并检查其退出状态。

根据man pgrep

-f    Match against full argument lists.  The default is to match against process names.
-q    Do not write anything to standard output.

答案 1 :(得分:1)

你可以使用它,

if [ `pidof 'NetworkManager'` ]; then
   echo "Running"
else
   echo "Not Running"
fi

答案 2 :(得分:1)

awk中处理此类事物(未定义变量)的一种方法是这样的:

echo hi | awk '{print a}'

与之相比:

echo hi | awk '{print a || 0}'
0

答案 3 :(得分:1)

如果是其他的<衬路

<强> [[ $(pidof 'NetworkManager') ]] && echo "Running" || echo "Not Running"

答案 4 :(得分:1)

试试这个:

pidof prog.bin | awk '{ if (NF!=0) print NF }'

答案 5 :(得分:0)

以下是awk和NF的一些测试:

$ # regular line of input
$ echo foo | awk '{print NF}'
1

$ # empty line
$ echo | awk '{print NF}'
0

$ # a word on input with no newline
$ printf "%s" nonewline | awk '{print NF}'
1

$ # no input, not even a newline
$ printf %s | awk '{print NF}'

# no output from awk

我怀疑pidof案例是最后一个:甚至不是换行符。强制换行:

echo $(pidof prog) | ...
printf "%s\n" "$(pidof prog)" | ...