如何删除给定路径上不同linux服务器中的文件?

如何删除给定路径上不同linux服务器中的文件?

这是我的脚本,我在这里使用它来列出用户给定路径上的文件,它正在登录服务器但没有列出文件,任何人都可以知道吗?

#! /bin/bash
echo "Please give correct path"
for HOST in $(cat servers.txt ) ; do
    ssha $HOST < List.sh
done

猫列表.sh

#!/bin/bash
echo "Enter the path to list the files"
read $path
ls -lrt

答案1

您遇到的问题是您通过标准输入传递脚本,但脚本本身尝试从标准输入读取。为了将参数传递给在标准输入上传递的脚本,我建议使用命令行参数,如果您仍然需要的话,可能会在外部循环中使用从标准输入读取的参数。

您遇到的第二个问题是您的调用语法read错误。 (它需要一个不带 . 的变量名$。)此外,您希望传递-rread,否则如果输入包含反斜杠,它会做出令人讨厌且意想不到的事情。

你遇到的第三个问题是你正在做for i in $(cat servers.txt),而你却想要<servers.txt while read -r i。这是按行进行的;该for循环不仅将整个文件读入内存(使其可能在大文件上爆炸),而且当个别行中有空格时它会失败。

答案2

我认为这里存在几个问题。其中之一是您尝试在远程服务器上的 ssh 会话中提示用户,但由于您通过 stdin 将该脚本重定向到 ssh 会话,因此没有分配终端,用户响应的机会也没有太多。

然后,您正在读取 from stdin,但这实际上是包含脚本其余部分的流,因此它只是从您希望其执行的行中读取,而不是用户输入。

然后您尝试扩展变量$path作为要读取的参数,但是您不应该拥有 ,$因为您只需给它变量的名称,您不必扩展它的名称(与您设置的任何位置一样)一个变量)。

最后,您永远不要尝试在命令中使用该路径ls

在这种情况下,在执行脚本之前提示用户可能会更好。就像是:

while read -r host; do
    read -p "Enter the path to list the files: " path
    ssh $HOST ls -lrt $path
done < servers.txt

相关内容