在bash中没有发生迭代ls输出

时间:2015-12-10 21:11:32

标签: linux bash shell

我正在尝试ls目录并打印出来,但没有显示任何内容。我能够SSH并执行第一个密码。但是,for循环中的任何内容都没有输出。我确定有一些名为event-test-的目录,因为我已经手动完成了这些目录。我手动输入了目录(/data/kafka/tmp/kafka-logs/)并运行了这段代码,出现了正确的输出,所以我不确定原因

手动输入的输出正确:

for i in `ls | grep "event-test"`; do echo $i; done;

脚本:

for h in ${hosts[*]}; do
        ssh -i trinity-prod-keypair.pem bc2-user@$h << EOF
                sudo bash
                cd /data/kafka/tmp/kafka-logs/

                pwd
                for i in `ls | grep "event-test-"`; do
                        pwd
                        echo $i;
                done;
                exit;
                exit;

EOF

done

2 个答案:

答案 0 :(得分:3)

这是因为

`ls | grep "event-test-"`

正在您的localhost上执行,而不是在远程主机上执行。除了解析ls之外,还容易出错,甚至不需要。你可以这样做:

for h in "${hosts[@]}"; do
   ssh -t -t trinity-prod-keypair.pem bc2-user@$h <<'EOF'
   sudo bash
   cd /data/kafka/tmp/kafka-logs/
   pwd
   for i in *event-test-*; do
       pwd
       echo "$i"
   done
  exit
  exit
EOF
done

答案 1 :(得分:1)

在解析ls时,最好做ls -1以获得更漂亮的解析列表。此外,在尝试查找名为“event-test-”的文件时,我建议使用find命令。由于我不完全确定您尝试做什么,除了列出这些“事件测试”文件的位置,我建议更类似于以下内容:

for h in "${hosts[@]}"; do ssh trinity-prod-keypair.pem bc2-user@$h -t -t "find /data/kafka/tmp/kafka-logs/ -type f -name *event-test-*;" ; done

这将为您提供文件完整路径和文件名的相当输出。

我希望这会有所帮助。