以下のように予想通りスクリプトを作成しました。 cdコマンドに日付を変数として指定したいが、日付をコマンドに変数として指定すると、「」コンマが追加され、次のようにエラーが表示されます。そのコンマをどのように削除しますか?
#!/usr/bin/expect
#!/bin/bash
set DATE [exec date +%c]
set DATE2 [exec date +'%Y%m%d']
log_user 0
log_file -a /lch/portal/scripts/sftpcheck21/log/sftpcheck21.log
send_log "test ran on $DATE \n"
spawn sftp -o "UserKnownHostsFile=/dev/null" -o "StrictHostKeyChecking=no" -o "Port=8022" [email protected]@sftapx21
expect "[email protected]@sftapx21's password:"
send "London@123\n"
expect "sftp>"
send "cd /PIMCOXXX_FDM/SwapClear/$DATE2\n"
expect "sftp>"
send "lcd /lch/portal/scripts/sftpcheck21\n"
expect "sftp>"
send "get 'P-PSWC-PIMCOXXX_FDM-$DATE2-233518_$DATE2_REP000F1d - Trade Level Pricing_ 1.TXT'\n"
expect "sftp>"
send "exit\n"
interact
log_file
出力は次のとおりです
sftp> cd /PIMCOXXX_FDM/SwapClear/'20220130'
Couldn't canonicalize: No such file or director
答え1
一重引用符は、ExpectまたはTclでは特に意味がありません。通常シェルはその項目を削除しますしかし、Tclはそうではありません。
予想日を取得するいくつかの組み込み方法があります。
答え2
次のようにスクリプトを更新し、問題を解決しました。
#!/bin/bash
set DATE [exec date +%c]
#set DATE2 [exec date +'%Y%m%d']
#set DATE3 [ exec /bin/date -d "yesterday" +%Y%m%d]
#set DATE3 [ exec /bin/date -d "-4 day" +%Y%m%d]
set DATE3 [ exec /bin/date -d "today" +%Y%m%d]
log_user 0
log_file -a /lch/portal/scripts/sftpcheck21/log/sftpcheck21.log
send_log "test ran on $DATE \n"
spawn sftp -o "UserKnownHostsFile=/dev/null" -o "StrictHostKeyChecking=no" -o "Port=8022" [email protected]@sftapx21
expect "[email protected]@sftapx21's password:"
send "London@123\n"
expect "sftp>"
send "cd /PIMCOXXX_FDM/SwapClear/$DATE3\n"
expect "sftp>"
send "lcd /lch/portal/scripts/sftpcheck21\n"
expect "sftp>"
send "get 'P-PSWC-PIMCOXXX_FDM-$DATE3-233518_$DATE3\_REP000F1d - Trade Level Pricing_ 1.TXT'\n"
expect "sftp>"
send "exit\n"
interact
log_file
send "get 'P-PSWC-PIMCOXXX_FDM-$DATE3-233518_$DATE3\_REP000F1d - Trade Level Pricing_ 1.TXT'\n
変数 DATE3 の区切り文字として \ を使用する行で