ホスト(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