일부 파일을 다른 컴퓨터로 보내는 스크립트를 작성하려고 하는데 실제 SCP를 시작하기 전에 몇 가지 확인을 하려고 합니다.
검사 중 하나는 원격 호스트에 특정 파일(원시 파일 수집)이 있는지 확인하는 것입니다.
이것은 내 스크립트의 일부입니다.
ssh -T $USERNAME@$HOSTNAME bash << EOF
shopt -s nullglob
FILENAMES=( ${RAWDIR}/*${DATE}* )
if (( ${#FILENAMES[@]} )) && [[ -e ${FILENAMES[0]} ]]
then
echo "At least one file matches the name" >&2
exit 0
else
echo "No files exist" >&2
exit 1
fi
EOF
하지만 다음 오류가 발생합니다.
tooladm@mxmcato01:tooladm/scripts> bash -x colplot.sh 20190201
+ PLOTDIR=/var/lib/zabbix/collectlfiles
+ RAWDIR=/opt/app/collectl
+ IMDG=3
+ HOSTNAME=mxmcaim03
+ USERNAME=abpdg3
+ DATE=20190201
+ SSH_CONN=zabbix@mxmcamon05
+ SEARCH_STRING='/opt/app/collectl/mxmcaim03-20190201*'
+ [[ 1 -ne 1 ]]
+ [[ 20190201 =~ ^[0-9]{8}$ ]]
+ date -d 20190201
+ is_valid=0
+ [[ 0 -ne 0 ]]
+ file_exists
+ ssh -T zabbix@mxmcamon05
FILES ARE NOT THERE, PROCEEDING WITH THE IMPORT
+ (( 0 ))
+ import_files
+ ssh -T abpdg3@mxmcaim03 bash
bash: line 5: unexpected argument `]]' to conditional unary operator
bash: line 5: syntax error near `]]'
bash: line 5: `if (( 0 )) && [[ -e ]]'
예상대로 작동하려면 스크립트를 실행하는 호스트와 동일한 호스트인 두 번째 스크립트를 생성하고 다음과 같이 SSH 연결로 리디렉션해야 했습니다.
lookup_remote_files()
{
ssh -T $USERNAME@$HOSTNAME "bash -s" < ./colplot_remote.sh "$DATE"
}
bash -x colplot.sh 20190201
+ PLOTDIR=/var/lib/zabbix/collectlfiles
+ RAWDIR=/opt/app/collectl
+ IMDG=3
+ HOSTNAME=mxmcaim03
+ USERNAME=abpdg3
+ DATE=20190201
+ SSH_CONN=zabbix@mxmcamon05
+ SEARCH_STRING='/opt/app/collectl/mxmcaim03-20190201*'
+ [[ 1 -ne 1 ]]
+ [[ 20190201 =~ ^[0-9]{8}$ ]]
+ date -d 20190201
+ is_valid=0
+ [[ 0 -ne 0 ]]
+ lookup_local_files
+ ssh -T zabbix@mxmcamon05
FILES ARE NOT THERE, PROCEEDING WITH THE IMPORT
+ (( 0 ))
+ lookup_remote_files
+ ssh -T abpdg3@mxmcaim03 'bash -s' 20190201
At least one file matches the name
+ (( 0 ))
동일한 스크립트에서 이 작업을 수행해야 합니다.
고쳐 쓰다:
오류는 더 이상 존재하지 않습니다. 저도 시도했지만 예상대로 작동하지 않았습니다. 제가 사용한 날짜에는 파일이 없었습니다.
tooladm@mxmcato01:tooladm/scripts> bash -x colplot.sh 20190205
+ PLOTDIR=/var/lib/zabbix/collectlfiles
+ RAWDIR=/opt/app/collectl
+ IMDG=3
+ HOSTNAME=mxmcaim03
+ USERNAME=abpdg3
+ DATE=20190205
+ SSH_CONN=zabbix@mxmcamon05
+ SEARCH_STRING='/opt/app/collectl/mxmcaim03-20190205*'
+ [[ 1 -ne 1 ]]
+ [[ 20190205 =~ ^[0-9]{8}$ ]]
+ date -d 20190205
+ is_valid=0
+ [[ 0 -ne 0 ]]
+ lookup_local_files
+ ssh -T zabbix@mxmcamon05
FILES ARE NOT THERE, PROCEEDING WITH THE IMPORT
+ (( 0 ))
+ lookup_remote_files
+ ssh -T abpdg3@mxmcaim03 bash
At least one file matches the name
+ (( 0 ))