一部のファイルを別のコンピュータに送信するスクリプトを作成しようとしていますが、実際の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 ))