sshを介してスクリプトを実行中に変数を保持する方法


0

私はsshを介して読み取り中にwhileループを実行しようとしています:

#!/bin/bash

ssh root@10.10.10.10 "cat /var/log/syncer/rm_filesystem.log | while read path; do stat -c \"%Y %n\" "$path"  >> /tmp/fs_10.10.10.10.log done"

しかし、問題は、リモートホスト上のファイルを読み取り、「rm_filesystem.log」にリストされているすべてのフォルダ/ファイルの統計を取得できるように、リモートホストで解決するために変数$ pathがローカルホストで解決していることです

回答:


1

または、sshコマンドラインを二重ではなく一重引用符で囲みます。その場合、コマンドはローカルエンドで置換なしでそのまま渡されます。すなわち

ssh root@10.10.10.10 'cat /var/log/syncer/rm_filesystem.log | while read path; do stat -c "%Y %n" "$path"  >> /tmp/fs_10.10.10.10.log done'

0

ssh user @ host "bash -s" <yourscript.sh

現在起こっていることは、スクリプトがローカルマシンで解析され、その全体がリモートマシンに送信されているということです。そのため、そこに到達するまでに、$ PATH変数は既にローカルの$ PATH値に置き換えられています。

上記の例では、リモートマシンでbashセッションを開き、bashをstdinから読み取るように設定しています(http://www.gnu.org/software/bash/manual/bashref.html#Invoking-Bashを参照

次に、スクリプト(外部ファイルに入力したもの)を渡して、リモートマシンで直接実行します。

この方法では、スクリプトのローカル解析が行われないため、環境変数が置き換えられません。


0

私はそれをあるべき姿でうまく機能させました:

!/ bin / bash

ssh root@10.10.10.10 "cat /var/log/syncer/rm_filesystem.log |パスの読み取り中; stat -c '%Y"%n "'" \ "'$ path' \" ">> / tmp / fs_10.10.10.10.log done」

bashのmanページを読んだ後、私はこのトリックを得た..

みんな助けてくれてありがとう

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.