CrontabからExpectスクリプトの出力を取得できません。

CrontabからExpectスクリプトの出力を取得できません。

別のサーバーから生ファイルをインポートするための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用です。

おすすめ記事