gpt4 book ai didi

linux - 在循环脚本中将变量传递给 sshpass 命令

转载 作者:太空宇宙 更新时间:2023-11-04 08:59:20 28 4
gpt4 key购买 nike

我正在尝试创建一个登录到另一台服务器并检查一些不同文件夹的磁盘使用情况的脚本 (test.sh):

测试.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 周围使用 {} 但仍然没有成功。我错过了什么?感谢您的帮助!

最佳答案

基本上,使用双引号而不是单引号。如有必要,您仍然可以用单引号连接:

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"

如果目录包含可能导致语法错误的空格或字符,这将很有帮助。还建议使用数组:

DIRS=('DIR 1' 'DIR 2' 'DIR 3')
for DIR in "${DIRS[@]}"; do
sshpass ...
done

关于linux - 在循环脚本中将变量传递给 sshpass 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24866413/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com