我创建了一个 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。