Интерактивная команда, позволяющая пользователю изменять каталог в bash

1197
Rich

Я ищу способ, основанный на CURSES (bash, c, на самом деле не имеет значения), позволяющий пользователю выбирать папку или даже файл примерно так же, как он делал бы с помощью Midnight Commander.

Я предполагаю использовать вверх / вниз для перемещения курсора, esc для отмены и ввод для выбора элемента под курсором. Если элемент является файлом, верните полный путь к этому файлу, если элемент является папкой, перейдите в эту папку.

Кто-нибудь знает о существующем?

Если нет, то как бы мне написать? Я в основном программист на Java, поэтому я мог бы использовать JavaCurses, но это немного похоже на излишество.

1
А почему бы не использовать mc, midnight-commander? rems 13 лет назад 0
Может быть, это подойдет? Я хочу, чтобы он был очень заблокирован - они должны иметь возможность только выбрать файл или отменить. Очевидно, что просто запуск mc дает вам множество мощных опций, слишком много для того, что я хочу. Rich 13 лет назад 0

1 ответ на вопрос

1
Dennis Williamson

Вы можете использовать dialogкоторый имеет --fselectдля выбора имен файлов и каталогов.

--fselect filepath height width
В диалоговом окне fselect (выбор файла) отображается окно ввода текста, в котором вы можете ввести имя файла (или каталог), а также два окна с именами каталогов и именами файлов.

Тем не менее, вы должны заметить, что скрипт для изменения каталогов для интерактивной оболочки должен быть получен из источника или в функции, поскольку изменение каталогов ограничено текущей оболочкой. Другими словами, при выходе из обычного сценария все cdвыполненное в нем теряется.

Спасибо за это - я скачал диалог, и он определенно показывает, что я хочу. То, что я не могу сделать, это на самом деле перемещаться по иерархии каталогов. Я могу добавить папку или файл к пути, но если я добавляю каталог, он фактически не попадает в эту папку. Rich 13 лет назад 0
@Rich: Кстати, есть также `--dselect`. Если вы имеете в виду отображение файлов и каталогов, вы должны сами это обработать в цикле. Вызвать `dialog --fselect` еще раз с новым каталогом. К сожалению, функциональность не так похожа на `mc`. Dennis Williamson 13 лет назад 0