为什么“head”挂起并且没有终止?

为什么“head”挂起并且没有终止?

我有一个 shell 脚本,它必须在远程主机上查找最新文件。我有以下代码:

ssh -q $HOSTNAME -t ls -t -1 /path/to/somewhere/ | head -n 1

它打印第一行,然后等待并且不终止。

但是,如果我删除| head -n 1,它将按顺序打印所有文件,然后定期终止并将控制流返回到我的终端。因此,SSH 命令部分可以正常终止,但 head 部分却不能。发生了什么?我该如何让 head 工作?

答案1

由于没有收到任何输入,它挂起了。尝试执行 head -n 1 。

这将确保管道传输到 head 将在伪 tty 中发生

ssh -q $HOSTNAME -t "ls -t -1 /path/to/somewhere/ | head -n 1"

我必须承认,在 Debian Squeeze 和 Ubuntu server 10.4 中我无法重现这一点。

请提供更多信息,例如不带“-q”、发行版等。

答案2

怎么样

ssh -q $HOSTNAME -t "ls -t -1 /path/to/somewhere/" | head -n 1

答案3

为什么不尝试这样呢:

ssh -q $HOSTNAME -t ls -tr -1 /some/path | tail -n 1

这将让您知道 head 命令是否有问题。您之前的命令似乎在我的计算机上运行正常。奇怪的东西。

相关内容