gpt4 book ai didi

linux - 用于比较远程目录的 Shell 脚本

转载 作者:太空宇宙 更新时间:2023-11-04 04:34:57 25 4
gpt4 key购买 nike

我有一个 shell 脚本,用于比较目录内容。该脚本必须通过 ssh 连接到不同的服务器才能获取目录列表。当我运行下面的脚本时,我得到的是我登录的/tmp 目录列表的服务器的内容,而不是我尝试 ssh 到的服务器的内容。你能告诉我我做错了什么吗?脚本中使用的配置文件如下(称为config.txt):

server1,server2,/tmp

脚本如下

#!/bin/sh
CONFIGFILE="config.txt"
IFS=","
while read a b c
do
SERVER1=$a
SERVER2=$b
COMPDIR=$c
`ssh user@$SERVER1 'ls -l $COMPDIR'`| sed -n '1!p' >> server1.txt
`ssh user@$SERVER2 'ls -l $COMPDIR'`| sed -n '1!p' >> server2.txt
done < $CONFIGFILE

当我查看 server1.txt 和 server2.txt 的输出时,它们完全相同 - 具有运行脚本的服务器的/tmp 内容(不是 server1 或 2)。在命令行上执行 ssh +dir 列表效果很好。我还收到错误“不会分配伪终端,因为标准输入不是终端”。将 -t -t 添加到 ssh 命令也没有帮助谢谢

最佳答案

I have the back ticks in order to execute the command.

执行命令不需要反引号 - 它们用于将命令的标准输出扩展到命令行中。当然,您不希望 ssh 命令的输出被解释为命令。因此,没有反引号它应该可以正常工作:

    ssh user@$SERVER1 "ls -l $COMPDIR" | sed -n '1!p' >>server1.txt
ssh user@$SERVER2 "ls -l $COMPDIR" | sed -n '1!p' >>server2.txt

(前提是使用双引号来允许扩展 $COMPDIR)。

关于linux - 用于比较远程目录的 Shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20765460/

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