Скрипт bash для отображения совместимых команд на основе «Windows-Speak» - PullRequest
5 голосов
/ 19 декабря 2008

Проблема: Клиент X - это пользователь Windows, который хочет иметь возможность запускать предварительно упакованные команды bash, используя мнемонические ключевые слова или «подсказки тегов», когда он входит в свою коробку RedHat через оболочку.

Пример: Клиент X регистрируется на хосте, используя ssh, и хочет выполнить некоторые обычные файловые операции. Она хочет, чтобы можно было набрать

copy file

и получите список команд bash, заполняющих пустые поля, на выбор

cp <@source@> <@dest@>               ### simple copy
cp -R <@startdir@>  <@destdir@>      ### recursive copy

Затем она хочет иметь возможность выбрать один из этих элементов, заполнить пробелы и просто нажать Enter, чтобы выполнить команду.

Клиент X готов заранее указать, какие команды он, скорее всего, захочет использовать (в windows-говорящем), а затем нанять разработчика, чтобы перевести их в команды bash, а затем соединить их в сценарий, который позволяет ему разговаривать в windows-говорить с bash и возвращать список команд.

ПРИМЕЧАНИЕ. Клиент X не любит, кстати, потому что он предполагает знакомство с терминами, используемыми в bash, в отличие от windows-говорящих. Например:

 apropos shortcut

не дает ей ничего о создании символических ссылок (хотя это именно то, что она хочет), потому что она не знает, какие ярлыки Windows называются в Linux. Очевидно, что концепции Windows не несут более 100%, поэтому ей придется в конечном итоге учиться, но она занятой человек и просит это как способ «облегчить» ее понимание Linux.

Вопрос: Как лучше всего начать что-то подобное? Существует ли скрипт perl, python, ruby, который уже делает что-то подобное? В bash есть что-то, что может симулировать этот тип запроса функции?

1 Ответ

5 голосов
/ 19 декабря 2008

Что вам, вероятно, нужно, это переопределить обработчик bash command-not-found. Вот раздел в /etc/bash.bashrc в стандартной установке Ubuntu, в котором устанавливается обработчик:

...
# if the command-not-found package is installed, use it
if [ -x /usr/lib/command-not-found ]; then
        function command_not_found_handle {
                # check because c-n-f could've been removed in the meantime
                if [ -x /usr/lib/command-not-found ]; then
                   /usr/bin/python /usr/lib/command-not-found -- $1
                   return $?
                else
                   return 127
                fi
        }
fi
...

Фактически, если команда не найдена, указанная пользователем программа выполняется с этой командой в качестве параметра. В случае Ubuntu это программа на Python, которая проверяет, является ли введенная пользователем команда допустимым приложением, которое может быть установлено, и, если это так, сообщает пользователю, что он / она может установить ее.

То, что вы, вероятно, хотите сделать, - это сравнить его с вашим хеш-кодом команд и строк использования и отобразить соответствующий, если есть совпадение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...