我不太确定问题是什么。我现在使用的是 Kali Linux 2.0,全新安装。以下内容在 Ubuntu 14.04 上有效,但不再有效(也许我不小心更改了它?)。它对我来说看起来是正确的,但每次运行时都会阻塞。
backup_folder=$(ssh -i /home/dexter/.ssh/id_rsa $server 'ls -t '$dir' | head -1')
这是一个更大脚本的一部分。 $server 和 $dir 已设置。当我单独运行该命令时,我得到了正确的输出,但它并没有结束连接。
答案1
我不完全确定为什么命令会挂起,但您不需要在服务器上运行整个管道。在那里做就足够了ls
:
backup_folder=$( ssh -i keyfile "$server" "ls -t -- '$dir'" | head -n 1 )
请注意,这引用了$dir
远程端的值(它仍将在本地扩展)。该head
将在本地运行。
这也伴随着“的答案中提到的警告”为什么*不*解析`ls`(以及该怎么做)?”。
答案2
我遇到了同样的问题,通过咨询 man ssh ,我发现:
# Problem: if you copy & paste those two lines together into a shell,
# then the second command is not executed.
# But if you run each line on its own, it will work
srcdirs=$(ssh myserver "ls -1 /home")
echo "$srcdirs" # command is also not recorded by history
# Solution: Redirect stdin from /dev/null
srcdirs=$(ssh -n myserver "ls -1 /home")
echo "$srcdirs"
希望这能解决您的问题...
答案3
我最近遇到了同样的问题,可能您应该在命令末尾添加到 stdout 的重定向,如下所示:
backup_folder=$(ssh -i /home/dexter/.ssh/id_rsa $server 'ls -t '$dir' | head -1' 2>&1)