为什么ack over ssh不起作用?

时间:2018-08-29 07:32:08

标签: bash ssh grep ack

我有一个简单的bash脚本,用于通过ssh删除远程服务器上的某些文件夹。它基本上是这样做的:

THE_HOST=12.34.56.78
ssh me@$THE_HOST "rm /the/file/path/thefile.zip"

这非常好用。在执行此操作之前,我经常使用ack

在文件夹中的文件内容中搜索字符串。
ack thestring /the/folder/path/

当我将ssh插入服务器并运行它时,这是完美的选择,但是当我在一个命令中使用它时,它将无法工作:

ssh me@$THE_HOST "ack thestring /the/folder/path/"

这似乎冻结或永远运行:我没有输出,命令永无止境。有人知道为什么这对于ack无效吗?

1 个答案:

答案 0 :(得分:2)

在终端中运行时,ack的行为可能会有所不同。尝试使用-t参数

ssh -t me@$THE_HOST "ack thestring /the/folder/path/"

当ack检测到stdin不是终端(tty设备)时,它将尝试从stdin而不是给定的文件/文件夹中读取要搜索的文本。通过ssh运行它时,将发生这种情况,stdin将连接到ssh连接,这看起来不像要确认的终端(tty)。

ssh的-t参数分配一个tty并将其连接到您运行的程序的stdin / out,然后ack会认为它在终端中运行,而是使用file / folder参数进行搜索。 参见http://github.com/beyondgrep/ack2/issues/659