【问题标题】:Output not showing all echo commands输出未显示所有回显命令
【发布时间】:2022-10-24 05:37:40
【问题描述】:

我正在使用在 serverA 上运行并连接到服务器以运行文件的 bash 脚本。 结果保存在变量中,然后回显。但是,它不会回显所有数据。

serverA 上的脚本正在运行:

count=$(sshpass -p password ssh -t -q user@serverB cd /home/tom && ./count.sh) 
echo "Count: $count"

这回声:341 不是Count: 341

serverB 上的 count.sh 脚本循环遍历一些文件夹并计算文件。

例如。

total=0

count=$(ls -l | wc -l | xargs)
if [ "$count" > 0 ]; then 
    total=$(( total + count ))
fi
echo "$total"

如何在 serverA 上显示完整的回声?

【问题讨论】:

  • ./count.sh 未在 serverB 上执行。 serverB 上唯一执行的是 cd 命令。如果你执行'cd /home/tom && ./count.sh',那么它可能会更接近正确。我相信您没有展示实际的 MCV 示例。

标签: bash echo


【解决方案1】:

您正在尝试运行 ./count.sh当地的机器,而不是远程主机。 && 是终止sshpass 命令的命令分隔符。使用引号确保将所需的 shell 命令传递给远程主机。

count=$(sshpass -p password ssh -t -q user@serverB 'cd /home/tom && ./count.sh')

除非count.sh,否则我看不到生成报告的输出能够在本地运行,但是某些东西(您是否使用set -e?)阻止了以下echo 的执行。

【讨论】:

  • 我没有运行set -e,或者更具体地说,我没有在脚本中添加任何内容来运行它。我认为 count.sh 是在本地运行的,因为我在同一台服务器上运行/从同一台服务器上运行以进行测试,所以我认为这弄乱了我的结果。无论如何要在远程服务器上运行命令并将结果返回到本地服务器?
  • 是的,我在答案中显示。引号防止&& 被解析为本地运算符,因此整个命令cd /home/tom && ./count.sh 被发送到服务器B 执行。
猜你喜欢
  • 2020-02-29
  • 1970-01-01
  • 2018-05-12
  • 2018-01-24
  • 2015-04-13
  • 2014-04-09
  • 2017-02-09
  • 2021-12-01
  • 1970-01-01
相关资源
最近更新 更多