【发布时间】:2011-08-10 04:19:35
【问题描述】:
我有 bash 脚本
#!/bin/sh
DTFILE=/etc/daytime.addr
DTPORT=13
DAYTIME_ERROR=/tmp/dtm.err
function daytime_error(){
if [[ -z $1 ]]
then
exit 1
fi
if [[ -e $DAYTIME_ERROR ]]
then
echo "Error already reported"
else
logger "$1"
touch $DAYTIME_ERROR
fi
exit 1
}
if [[ -s $DTFILE ]]
then
ADDR=$(head -n1 $DTFILE)
DAYTIME=$(telnet $ADDR $DTPORT | time_conv.awk)
if [[ -z $DAYTIME ]]
then
daytime_error "Daytime client: no connection to $ADDR"
else
date -s "$DAYTIME"
hwclock -w
rm $DAYTIME_ERROR
fi
else
daytime_error "Daytime client: no daytime server address in file $DTFILE"
fi
从命令行调用时它可以工作,但在 cron 调用它时会失败。特别是带有 telnet 命令的行给出了零字节的输出。 Telnet 有 755 掩码,所以每个用户都应该可以使用它。有什么想法吗?
更新,time_conv.awk的内容:
#! /usr/bin/awk -f
/[0-9]+:[0-9]+:[0-9]+/ {
if ($2~/Jan/) $2=1;
else if ($2~/Feb/) $2=2;
else if ($2~/Mar/) $2=3;
else if ($2~/Apr/) $2=4;
else if ($2~/May/) $2=5;
else if ($2~/Jun/) $2=6;
else if ($2~/Jul/) $2=7;
else if ($2~/Aug/) $2=8;
else if ($2~/Sep/) $2=9;
else if ($2~/Oct/) $2=10;
else if ($2~/Nov/) $2=11;
else if ($2~/Dec/) $2=12;
print $5 "-" $2 "-" $3 " " $4
}
【问题讨论】:
-
你是如何运行它的?是
bash <script>还是sh <script>还是./<script>。可能是因为您使用#!/bin/sh而不是#!/bin/bash。尝试使用-x键运行它。 -
time_conv.awk 的内容是什么?
-
@Draco Alter 我尝试使用 /bin/bash 而不是 /bin/sh,结果相同。
-
@bmk #! /usr/bin/awk -f /[0-9]+:[0-9]+:[0-9]+/ { if ($2~/Jan/) $2=1;否则如果 ($2~/Feb/) $2=2;否则 if ($2~/Mar/) $2=3;否则如果 ($2~/Apr/) $2=4;否则 if ($2~/May/) $2=5;否则 if ($2~/Jun/) $2=6;否则 if ($2~/Jul/) $2=7;否则 if ($2~/Aug/) $2=8;否则如果 ($2~/Sep/) $2=9;否则 if ($2~/Oct/) $2=10;否则 if ($2~/Nov/) $2=11;否则 if ($2~/Dec/) $2=12;打印 $5 "-" $2 "-" $3 " " $4 }
-
用
bash -x <script>运行它怎么样?它应该打印一些调试信息。