Вариант на bash: http://pastebin.com/sWx7C4XC
Вариант для включения в .zshrc (есть автодополнение): http://pastebin.com/n9zz7s9u
Частично сам, частично не сам, набросал вот такую вещь. Замысел таков: вместо многочисленных лаунчеров типа xfce4-appfinder, gmrun и прочее, мне кажется более удобным запускать эмулятор терминала с соответствующей геометрией, и там запускать команды. Для того, чтобы это было больше похоже на лаунчер, и служит эта функция/этот скрипт.
Суть его такова: проверяем аргумент на соответствие шаблону (строки 6-15), если подходит - выполняем то или иное действие для строки, из которой убран, собственно, идентификатор (для примера - гуглинг по g:запрос и открытие википедии по w:страница). Затем, если то, что ввёл пользователь - это исполняемый файл в $PATH, то выполнить его (способы поиска в $PATH для bash и zsh разные). Дальше - если то, что ввёл пользователь, не находится в $PATH, то проверить - есть такой файл? Если нет, то открыть строку через exo-open (так как там может быть протокол http://, ftp:// или ещё что-то, не являющееся файлом, но открываемое exo-open). Если же это - файл, то проверить его на то, исполняемый ли он. Если исполняемый - то выполнить, иначе - открыть через exo-open.
Если какое-либо из действий было успешно - то открепить запущенное от терминала и закрыть оболочку (если запускается, как скрипт, то сам терминал не закроется, а просто прекратится выполнение скрипта с отвязкой запущенного от терминала. В случае же запуска, как функции zsh, закроется сам zsh, таким образом, будет поведение, как у лаунчеров: набрал, enter, лаунчер закрылся, команда выполнилась).
Вместо exo-open можно использовать xdg-open, kde-open, gnome-open — по желанию. Результат будет примерно одинаковым.
Реализовано ещё не всё, что хотелось бы. Конкретно, мне хотелось бы добавить обработку опций: например, чтобы при -t команда выполнялась в терминале, но я не знаю, как сделать обработку опций так, чтобы это не конфликтовало с основным аргументом функции/скрипта. Буду рад подсказкам. Все желающие приглашаются к тестированию, допилу, указанию на костыли и ошибки и прочее.
Запускать так: если zsh, то всё со второй ссылки добавить в конец .zshrc, и вызывать по «xo строка». Чтобы работало автодополнение, надо его включить в zsh (autoload -Uz compinit, вроде)
Если запускать, как отдельный скрипт на bash - то всё с первой ссылки положить в файл, сделать ему chmod +x и запускать по ./файл строка.
Видео-демонстрация того, как я это использую: https://dropmefiles.com/PUv3I (.ogv файл)