Назад | Перейти на главную страницу

Почему `` голова '' свешивается и не прекращается?

У меня есть сценарий оболочки, который должен найти самый новый файл на удаленном хосте. У меня есть такой бит:

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

Он печатает первую строку, затем ждет и не завершается.

Однако, если я удалю | head -n 1, затем он распечатает все файлы по порядку, а затем регулярно завершит работу и вернет поток управления моему терминалу. Таким образом, часть команды SSH завершается нормально, но не головная часть. В чем дело? Как заставить работать голову?

Он зависает, потому что не получает никакого ввода. Попробуйте сделать просто head -n 1.

Это гарантирует, что в псевдотерминале возникнет соединение с головкой.

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

Я должен признать, что в Debian Squeeze и Ubuntu server 10.4 я не смог воспроизвести это.

Постарайтесь предоставить больше информации, например, без «-q», дистрибутива и т. Д.

Как насчет

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

Почему бы не попробовать вот так:

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

Это даст вам знать, если команда head неисправна. Ваша предыдущая команда, похоже, отлично работает на моей машине. Странные вещи.