Linux 在循环脚本内将变量传递到sshpass命令
我正在尝试创建一个脚本(test.sh),该脚本登录到另一台服务器并检查一些不同文件夹的磁盘使用情况: test.sh:Linux 在循环脚本内将变量传递到sshpass命令,linux,bash,ssh,Linux,Bash,Ssh,我正在尝试创建一个脚本(test.sh),该脚本登录到另一台服务器并检查一些不同文件夹的磁盘使用情况: test.sh: DIRS="dir_A dir_B dir_C" for DIR in $DIRS do sshpass -p user_password ssh -o StrictHostKeyChecking=no user_name@host 'cd /opt/app/$DIR;SIZE=$(du -s);echo "YVALUE="$SIZE > ../size_$DIR
DIRS="dir_A dir_B dir_C"
for DIR in $DIRS
do
sshpass -p user_password ssh -o StrictHostKeyChecking=no user_name@host 'cd /opt/app/$DIR;SIZE=$(du -s);echo "YVALUE="$SIZE > ../size_$DIR.txt'
done
但是,变量DIR永远不会传递给脚本。当我运行脚本时,它是空的。我尝试使用{}大约$DIR,但仍然没有成功。我错过了什么?谢谢你的帮助 用单引号(
“
)包装字符串将停止任何bash扩展,您需要对$DIR使用双引号进行求值,并转义要通过SSH发送的字符串中的任何双引号:
sshpass -p user_password ssh -o StrictHostKeyChecking=no user_name@host "cd /opt/app/$DIR;SIZE=\$(du -s);echo \"YVALUE\"=$SIZE > ../size_$DIR.txt"
用单引号(
“
)包装字符串将停止任何bash扩展,您需要对要计算的$DIR使用双引号,对要通过SSH发送的字符串中的任何双引号进行转义:
sshpass -p user_password ssh -o StrictHostKeyChecking=no user_name@host "cd /opt/app/$DIR;SIZE=\$(du -s);echo \"YVALUE\"=$SIZE > ../size_$DIR.txt"
用单引号(
“
)包装字符串将停止任何bash扩展,您需要对要计算的$DIR使用双引号,对要通过SSH发送的字符串中的任何双引号进行转义:
sshpass -p user_password ssh -o StrictHostKeyChecking=no user_name@host "cd /opt/app/$DIR;SIZE=\$(du -s);echo \"YVALUE\"=$SIZE > ../size_$DIR.txt"
用单引号(
“
)包装字符串将停止任何bash扩展,您需要对要计算的$DIR使用双引号,对要通过SSH发送的字符串中的任何双引号进行转义:
sshpass -p user_password ssh -o StrictHostKeyChecking=no user_name@host "cd /opt/app/$DIR;SIZE=\$(du -s);echo \"YVALUE\"=$SIZE > ../size_$DIR.txt"
基本上,使用双引号而不是单引号。如有必要,仍可以使用单引号连接:
sshpass -p user_password ssh -o StrictHostKeyChecking=no user_name@host 'cd /opt/app/'"$DIR"';SIZE=$(du -s);echo "YVALUE="$SIZE > ../size_'"$DIR".txt
我刚刚注意到:du-s
生成两列输出,因此可能还没有正确使用它。也许仍然需要像SIZE=${SIZE%$'\t'*}
这样的东西
另一种方法是通过输入发送目录,并让另一端读取:
sshpass -p user_password ssh -o StrictHostKeyChecking=no user_name@host 'read -r DIR; cd "/opt/app/$DIR"; SIZE=$(du -s); echo "YVALUE=$SIZE" > "../size_$DIR.txt"' <<< "$DIR"
基本上,使用双引号而不是单引号。如有必要,仍可以使用单引号连接:
sshpass -p user_password ssh -o StrictHostKeyChecking=no user_name@host 'cd /opt/app/'"$DIR"';SIZE=$(du -s);echo "YVALUE="$SIZE > ../size_'"$DIR".txt
我刚刚注意到:du-s
生成两列输出,因此可能还没有正确使用它。也许仍然需要像SIZE=${SIZE%$'\t'*}
这样的东西
另一种方法是通过输入发送目录,并让另一端读取:
sshpass -p user_password ssh -o StrictHostKeyChecking=no user_name@host 'read -r DIR; cd "/opt/app/$DIR"; SIZE=$(du -s); echo "YVALUE=$SIZE" > "../size_$DIR.txt"' <<< "$DIR"
基本上,使用双引号而不是单引号。如有必要,仍可以使用单引号连接:
sshpass -p user_password ssh -o StrictHostKeyChecking=no user_name@host 'cd /opt/app/'"$DIR"';SIZE=$(du -s);echo "YVALUE="$SIZE > ../size_'"$DIR".txt
我刚刚注意到:du-s
生成两列输出,因此可能还没有正确使用它。也许仍然需要像SIZE=${SIZE%$'\t'*}
这样的东西
另一种方法是通过输入发送目录,并让另一端读取:
sshpass -p user_password ssh -o StrictHostKeyChecking=no user_name@host 'read -r DIR; cd "/opt/app/$DIR"; SIZE=$(du -s); echo "YVALUE=$SIZE" > "../size_$DIR.txt"' <<< "$DIR"
基本上,使用双引号而不是单引号。如有必要,仍可以使用单引号连接:
sshpass -p user_password ssh -o StrictHostKeyChecking=no user_name@host 'cd /opt/app/'"$DIR"';SIZE=$(du -s);echo "YVALUE="$SIZE > ../size_'"$DIR".txt
我刚刚注意到:du-s
生成两列输出,因此可能还没有正确使用它。也许仍然需要像SIZE=${SIZE%$'\t'*}
这样的东西
另一种方法是通过输入发送目录,并让另一端读取:
sshpass -p user_password ssh -o StrictHostKeyChecking=no user_name@host 'read -r DIR; cd "/opt/app/$DIR"; SIZE=$(du -s); echo "YVALUE=$SIZE" > "../size_$DIR.txt"' <<< "$DIR"
我假设
$(du-s)
中的美元也应该转义,否则他将获得本地路径大小。无论如何,我认为Konsolebox的答案更好,因为它不太容易出错。我假设$(du-s)
中的美元也应该转义,否则他将得到本地路径大小。无论如何,我认为Konsolebox的答案更好,因为它不太容易出错。我假设$(du-s)
中的美元也应该转义,否则他将得到本地路径大小。无论如何,我认为Konsolebox的答案更好,因为它不太容易出错。我假设$(du-s)
中的美元也应该转义,否则他将得到本地路径大小。无论如何,我认为Konsolebox的答案更好,因为它不容易出错。感谢您的快速回复!这工作做得很好!谢谢你的快速回复!这工作做得很好!谢谢你的快速回复!这工作做得很好!谢谢你的快速回复!这工作做得很好!