我有一个 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 命令是否有问题。您之前的命令似乎在我的计算机上运行正常。奇怪的东西。