Такие программы, как sudo
, читают пароль напрямую с оконечного устройства, а не с stdin
, так что, к сожалению, это не тривиальная вещь. Я не уверен, реалистично ли это для Android или нет, но в обычной системе UNIX самое простое решение - использовать expect
, которая является библиотекой для симуляции терминала и, тем самым, автоматизации этих видов взаимодействия. Он часто используется как отдельная программа, встроенная в Tcl
, и я собрал вместе системы, в которых Java запустила expect
, чтобы общаться с такими инструментами, как sudo
, и она отлично работает.
expect
включает в себя своего рода декларативный язык сценариев, который говорит ему, как запустить другую программу и как реагировать на вывод этой программы.
Что вы могли бы сделать, это использовать Runtime.exec()
для запуска программы expect
, предоставляя скрипт, который просто запускает "sudo mount
", отслеживает запрос пароля и предоставляет пароль. Сценарий, вероятно, будет выглядеть примерно так ( G4rb4geB4rg3 - пароль):
spawn sudo mount -o loop /home/user1/Desktop/aDirectory/system.img
expect "password:"
send "G4rb4geB4rg3\r"
expect eof