Согласно the documentation, каждый вызов $chan->exec()
работает в своем собственном процессе на пульте дистанционного управления. cd dir1
в первом exec
влияет только на это выполнение. Следующий exec
- это совершенно отдельный процесс.
Самый простой способ решить эту проблему было бы пройти полный путь в команде, т.е.
$chan->exec("command dir1/file1.txt");
Можно также попробовать установить переменную PATH, используя $chan->setenv()
но это, вероятно, будет запрещено на удаленной стороне ,
Заметим также (из раздела process
):
... также можно запустить удаленную оболочку (с использованием оболочки) и имитировать взаимодействие с пользователем команды печати на его стандартного ввода потока и считывания данных обратно от его stdout и stderr. Но по возможности следует избегать такого подхода; говорить с оболочкой сложно и, в общем, ненадежным.
# $ chan-> exec ('ls -la'); [см. здесь] (http://www.perlmonks.org/?node_id=569657) – ssr1012
@ ssr1012 Это будет список каталогов. Я не хочу этого делать. – CJ7
'$ chan-> exec (" ./ command ");' –