SSHコマンドから値を取得する

SSHコマンドから値を取得する

ホスト(Host_1)からいくつかのファイルを消去するスクリプトがあります。別のホスト(Host_2)からHost_1のスクリプトにSSH接続しています。

Host_1のスクリプト:

if [ condition here ]
then
    rm -r /folder #command to remove the files here
    b=$(df -k /folder_name| awk '{print $4}' | tail -1) #get memory after clearing files.
    echo "$b"
else
    return 1
fi

Host_2 から Host_1 に SSH 接続しています。

mail_func()
{
val=$1
host=$2
if [ $val -ne 1 ]
        then
        echo "$host $val%" >> /folder/hostnames1.txt #writing host and memory to text file
else
        exit
fi
}
a=$(ssh -q Host_1 "/folder/deletefile.sh")
mail_func a Host_1

これは空白を返します。出力がありません。次のようにして、Host_2の出力があるかどうかを確認しようとしました。

echo $a

これにより、私は空白のままです。私がここで何を見逃しているのかよくわかりません。単一のSSH命令でもメモリ空間を確保することを提案します。

答え1

このreturnステートメントは終了コードを設定するために使用され、変数を割り当てるための出力としては使用されません。文字列を出力として取り込むには、その文字列を標準出力に書き込む必要があります。クイック修正は、スクリプトを次のように変更することです。

#!/bin/bash

#    Script in Host_1

if [ condition here ]
then
    rm -r /folder #command to remove the files here
    b=$(df -k /folder_name| awk '{print $4}' | tail -1) #get memory after clearing files.
    echo "$b"
else
    # NOTE:
    #     This return statement sets the exit-code variable: `$?`
    #     It does not return the value in the usual sense.
    # return 1

    # Write the value to stdout (standard output),
    # so it can be captured and assigned to a variable.
    echo 1
fi

関連情報