jenkinsマシンからリモートサーバー上で一連のコマンドを実行しようとしています。 これらのコマンドは、ものsshを使ってリモートで実行されたgrepコマンドの出力を変数に保存しますか?
- 次のスクリプト、私はスクリプトの下に作成した
そのディレクトリにリモートサーバーからのいくつかのファイル
servername=<remote server ip>
sshuserconnect() {
echo `/usr/bin/sshpass -p passwd ssh -o ConnectTimeout=5 -o UserKnownHostsFile=knownhosts -o StrictHostKeyChecking=no $*`
}
sshuserconnect [email protected]$servername << ENDOFSSH
sqlplus -s /nolog <<EOF> /home/user/output.txt
connect user/[email protected]$servername:<port>/<DB schema>
select column1||','||value from table where column1 like 'param1';
EOF
version=`grep version /home/user/output.txt | cut -f 2 -d ","`
mkdir /home/user/${version}
ENDOFSSH
をリモートサーバ上のディレクトリ
grep: output.txt: No such file or directory
Pseudo-terminal will not be allocated because stdin is not a terminal.
一部のデバッグの後、私はgrepコマンドでのみスクリプトが失敗することがわかりました。バージョン変数へのgrep出力の割り当てが失敗します。
私は多くのオプションを試しましたが、これが正しい方法ではないと思います。誰も私がこれを解決するのを助けることができますか?
うん、これは次のようになります。私は以下のコードでは、意図的に明示するためにとStackOverflowのスペースとタブをレンダリングするために、コードを貼り付ける&をコピーする意味が正しく動作しないの両方、
<TAB>
でタブ文字をマーク私には単純なタイプミスです。 'grep | grepの代わりにawkを使うことができます。 cut ': 'awk -F、'/version/{print $ 2} 'output.txt'です。 –ローカルディレクトリがPATHの一部でない場合は、output.txtを./output.txtに変更することをお勧めします。 $ {Version}を$ {version}に変更してください。 – LAROmega
@LAROmega、私は質問を編集し、ファイルパスを絶対パスに変更しました。依然としてエラーは同じです。 @TomFenech、私はあなたのアプローチを 'version = 'awk -F'/version/{print $ 2} '/ home/user/output.txt'としました。まだエラーは同じです。 – user3347819