別のサーバーから生ファイルをインポートするためのExpectスクリプト(.exp)を作成しました。その後、.expを呼び出すことができる.shファイルもあります。一般的な方法(./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用です。