我正在尝试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
答案 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
这将为您提供文件完整路径和文件名的相当输出。
我希望这会有所帮助。