У меня есть сценарий оболочки, который должен найти самый новый файл на удаленном хосте. У меня есть такой бит:
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 неисправна. Ваша предыдущая команда, похоже, отлично работает на моей машине. Странные вещи.