아래와 같이 예상대로 스크립트를 작성했습니다. 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의 구분 기호로 \를 사용하는 줄에서