Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 在循环脚本内将变量传递到sshpass命令_Linux_Bash_Ssh - Fatal编程技术网

Linux 在循环脚本内将变量传递到sshpass命令

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

我正在尝试创建一个脚本(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.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的答案更好,因为它不容易出错。感谢您的快速回复!这工作做得很好!谢谢你的快速回复!这工作做得很好!谢谢你的快速回复!这工作做得很好!谢谢你的快速回复!这工作做得很好!