Мой вопрос представляет собой комбинацию из this question и this question. Я хочу, чтобы установить файл с пробелами в пути с правами SUDO, как таковые:Java exec mount с sudo и файловыми пробелами
sudo mount /path/to/mount/point /dir\\ with/spaces\\ in\\ name
Если нет никаких пробелов в пути, я могу сделать это, так как этот пользователь имеет разрешение SUDO для команды монтирования:
Runtime.exec("sudo mount /path/to/mount/point /dir/without/spaces");
Но есть пробелы, так что я пробовал:
Runtime.exec("sudo mount /path/to/mount/point /dir\\ with/spaces\\ in\\ name");
Это дало мне "Непризнанные ARG '\'" или что-то, что эффект от монтировки. Окружение дорожек с одиночными или двойными кавычками также не помогло.
Тогда я попробовал:
Runtime.exec("sudo", "mount", "/path/to/mount/point", "/dir with/spaces in name");
который, конечно, не может, потому что хочет Судо некоторый метод ввода пароля, даже если я обычно не нужно вводить пароль для монтирования Судо. Faaantastic.
Это похоже на уловку-22 для меня. Я могу получить sudo, если я пойду с единственным методом String, или я могу получить имена путей, если я иду с методом String array. Как я могу получить как?
Спасибо за ответ. И жаль, что я спешил вчера и забыл сбежать от моей косой черты: это была не проблема, с которой я сталкивался. Я пробовал каждую комбинацию одиночных, двойных и даже тройных обратных косых черт («\\», «\\\\» и «\\\\\\» в Java), но, к сожалению, ни одна из них не работает. Судо также должен оставаться там, потому что учетная запись, с которой я запускаю это, имеет разрешение sudo для монтирования, но не регулярное разрешение, и у меня нет контроля над этим. Я знаю, это очень специфический набор ограничений. –
Вы хотите 'sudo' без предоставления пароля пользователя? – user2622016
В основном мне нужно решение, которое позволяет путям с пробелами и не требует от меня пароля. У меня уже есть команда монтирования, настроенная с помощью NOPASSWD в/etc/sudoers для этой учетной записи. –