SSHを介してリモートサーバーに接続し、一連のコマンドを実行します。

SSHを介してリモートサーバーに接続し、一連のコマンドを実行します。

リモートサーバーで3つのコマンドを実行する必要があります。

これら2つのコマンドは単純なバージョンチェックで、3番目のコマンドはデフォルトでデータベースのバージョンをチェックするショートプログラムです。内容はこれです

#!/bin/sh

ssh -t user@server << EOF

#AIP_version
domaininfo -d $GLOBAL_DOMAIN -history | head -n -3 | tail -1 > /home/abc/aip_version.txt

## Fetching AIP Online Details ##

variable1=$(
echo "set feed off
set pages 0
select * from system_parameters where name like '%VERS%';
exit
"  | sqlplus /@aipprealias01
)
echo "$variable1" > aipo_version.txt

#Fetching RPAS-AIP Details

domaininfo -d $GLOBAL_DOMAIN -version | sed -n '4,7p' > /home/abc/rpas-aip_version.txt

EOF

このスクリプトを実行しようとすると、次のエラーが発生します。

stdin が端末ではないため、疑似端末は割り当てられません。

-bash: 行 8: SQL*Plus:: コマンドが見つかりません

-bash:行10:予期しないトークン 'c'の近くに構文エラーがあります。

-bash:10行目: `著作権(c)1982、2014、Oracle。すべての権利を保有。 '

このエラーを解決する方法を理解するのに役立つ必要があり、2番目に1台ではなく複数のサーバーでSSH用にこのスクリプトを実行するにはどうすればよいですか?ありがとうございます!

ベストアンサー1

EOF一重引用符で囲まれた文字列で区切り文字タグを変更します'EOF'。これにより、ローカルシェルが$( ... )コマンドと$variable変数を評価できなくなります。

たとえば、EOFこれをマークアップの周囲の一重引用符(表示されているように)と比較し、マークアップなしで比較します。

nl << 'EOF'
Numbered line
And another $(date)
EOF

一重引用符で出力

 1  Numbered line
 2  And another $(date)

引用符なしで出力

 1  Numbered line
 2  And another 29 Dec 2021 16:20:40

おすすめ記事