Bash 스크립트는 원격 SSH 명령을 올바르게 구문 분석할 수 없습니다.

Bash 스크립트는 원격 SSH 명령을 올바르게 구문 분석할 수 없습니다.

일부 파일을 다른 컴퓨터로 보내는 스크립트를 작성하려고 하는데 실제 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 ))

관련 정보