无法在 Crontab 中获取 Expect 脚本的输出

无法在 Crontab 中获取 Expect 脚本的输出

我创建了一个 Expect 脚本 (.exp) 来获取其他服务器中的原始文件。然后,我还有 .sh 文件来调用我的 .exp。当我尝试以通常的方式运行它时(./call_expect.sh),它运行良好。但是当我在 CRONTAB 中安排它时,没有原始数据获取并且期望脚本没有响应。我现在很困惑,我不知道我的标头是否有问题,因为它们会发生冲突,或者 crontab 是否有问题。

期望示例(directory.exp)

#!/usr/local/bin/expect

package require Expect
# set Variables
set USER {USER1234}
set PASSWORD {PASSWORD12345}
set NODE {test_server}
set DIR {/Daily/TESTING}
set PROMPT {$}
set COMMAND0 {ls -lrt Daily/TESTING | grep dr | grep -v tar | awk {'print $9'} | sort | grep ^2}
set quit_COMMAND {exit}


spawn ssh $USER@$NODE
expect {
  "assword:"
}
send "$PASSWORD\r"

expect {
  "$PROMPT "
}
send "$COMMAND0\r"

expect {
  "$PROMPT "
}
send "exit\r"

示例 .SH (call_expect.sh)

#!/bin/ksh

{locations . . . }

${BIN}/directory.exp | dos2unix | grep ^2 > ${CONFIG}/.list_dir.tmp

previous_directory=`cat ${CONFIG}/.list_dir.tmp | tail -2 | head -1`
latest_directory=`cat ${CONFIG}/.list_dir.tmp | tail -1  | head -1`

echo "`date` Previous Dir: ${previous_directory}   Latest Dir: ${latest_directory}"

我正在使用 Solaris 5.10。

答案1

我想您从 awk 命令中收到错误:单引号似乎使 awk 感到困惑(我正在 Mac 上测试它,因此您的 awk 的行为可能有所不同)

$ seq 10 | awk "'print \$9'"
awk: cmd. line:1: 'print $9'
awk: cmd. line:1: ^ invalid char ''' in expression

awk 要求动作主体有大括号。

尝试这个:

set COMMAND0 {ls ... | awk {{print $9}} | ...}

外部大括号是 Tcl(和期望)引用,内部大括号用于 awk。

相关内容