BashスクリプトはリモートSSHコマンドを正しく解析できません。

BashスクリプトはリモートSSHコマンドを正しく解析できません。

一部のファイルを別のコンピュータに送信するスクリプトを作成しようとしていますが、実際のSCPを起動する前にいくつかの確認を試みます。

チェックの1つは、リモートホストに特定のファイル(生ファイルの収集)があることを確認することです。

これは私のスクリプトの一部です。

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  ]]'

期待どおりに機能するには、スクリプトを実行しているホストと同じホストである2番目のスクリプトを作成し、次のように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 ))

関連情報