Почему ack over ssh не работает? - PullRequest
0 голосов
/ 29 августа 2018

У меня есть простой 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 голосов
/ 29 августа 2018

Может быть, ack ведет себя по-разному, когда он запускается в терминале. Попробуйте использовать аргумент -t

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

Когда ack обнаруживает, что stdin не является терминалом (tty-устройством), он пытается прочитать текст для поиска из stdin вместо указанного файла / папки. Вот что происходит, когда вы запускаете его через ssh, stdin будет подключен к соединению ssh, которое не похоже на терминал (tty) для подтверждения.

Аргумент -t для ssh вместо этого выделяет tty и подключает его к stdin / out программы, которую вы запускаете, ack будет думать, что она работает в терминале, и вместо этого будет использовать аргумент file / folder для поиска. См http://github.com/beyondgrep/ack2/issues/659

...