Linux 新手,问个基础问题. 搭了个本地 IPV6 的 DDNS 服务,用 Crontab 定时执行. 目前出现问题,.sh 文件手动执行无任何问题,Crontab 执行持续报错.
把报错结果 LOG 输出,Cat 显示为:
57: read: Illegal option -n
查找代码结构.
第 57 行为 while read -n1 c
各位大大帮忙看看.这个问题怎么解决?搞了好久没搞定.
是需要把 Read 的环境变量导入么,read 的默认路径在哪,系统 Debian.?????
相关上下代码为:
current_ipv6=nslookup -query=AAAA $aliddnsipv6_name 2>&1
#echo $current_ipv6
current_ipv6=echo "$current_ipv6" | grep 'Address: ' | tail -n1 | awk '{print $NF}'
echo $current_ipv6
if [ "$?" -eq "0" ]
then
current_ipv6=echo "$current_ipv6" | grep 'Address: ' | tail -n1 | awk '{print $NF}'
echo $current_ipv6
if [ "$ipv6" = "$current_ipv6" ]
then
echo "skipping"
fi
else unset aliddnsipv6_record_id fi
timestamp=date -u "+%Y-%m-%dT%H%%3A%M%%3A%SZ"
urlencode() {
# urlencode <string>
out=""
while read -n1 c
do
case $c in
[a-zA-Z0-9._-]) out="$out$c" ;;
*) out="$outprintf '%%%02X' "'$c"
" ;;
esac
done
echo -n $out
}</string>
1
ochatokori 2019-05-04 02:29:47 +08:00 via Android
cron 有个坑就是 cron 执行的时候不像普通登录后的 shell 带有 /etc/profile 里面定义的环境变量
不知道你是不是这个问题 临时解决办法是在需要执行的 shell 脚本前面加个 source /etc/profile 或者 export 手动定义 |
2
alvinbone88 2019-05-04 03:04:55 +08:00 via Android 2
shell 的问题
cron 默认使用 sh 来执行脚本,刚好 Debian 把 sh 链接到 dash 上了,而 dash 的 read 没有-n 这个选项 |
3
Iterator 2019-05-04 08:36:21 +08:00
是个独立的小环境,PATH bash 都跟自己用 terminal 是不一样的
|
4
moa OP @ochatokori 试了加载变量 log 还是报错
|
5
moa OP |
6
moa OP @alvinbone88 搞定了 多谢 果然是这个问题导致的
|