我有一个简单的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无效吗?
答案 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