Открытие файла из терминала только путем ввода его имени

15

Я знаю, что xdg-openоткроет из терминала файл в предпочтительном приложении пользователя, как это:

xdg-open filename

Но мне интересно, как я могу открыть файл из текущего каталога в приложении по умолчанию, набрав:

filename

с последующим Enter, конечно. Ничего больше.

Раду Рэдяну
источник
1
Предположительно, вы могли бы изменить command_not_found_handle()функцию, /etc/bash.bashrcчтобы проверить и открыть файл xdg в том же каталоге?
хронит
1
Я могу уменьшить ваш риск, используя псевдоним. alias open = "xdg-open" open это просто переменная. Вы можете сделать это так коротко, как вы хотите.
13

Ответы:

20

Используйте command-not-foundхук Ubuntu , как указано в Command Not Found Magic . В настоящее время он используется для предложения пакетов для установки. Обратитесь к тому, /usr/share/doc/command-not-found/READMEкоторый должен быть установлен в вашей системе.

Еще лучше, поскольку он не зависит от command-not-foundпакета, (пере) внедрив встроенную command_not_found_handleфункцию Bash, чтобы сделать существующий файл xdg-openif $1и делегировать все остальные случаи предыдущей реализации.

# Save the existing code for the handler as prev_command_not_found_handle.
# Bit of a hack, as we need to work around bash's lack of lexical closure,
# and cover the case when it is not defined at all.
eval "prev_$(declare -f command_not_found_handle)" >& /dev/null \
     || prev_command_not_found_handle () { 
            echo "$1: command not found" 1>&2
            return 127
        }

# Define the new implementation, delegating to prev_handler.
command_not_found_handle () {
    if [ -f "$1" ]; then
        xdg-open "$1"
    else
        prev_command_not_found_handle "$@"
    fi
}

Хороший вопрос, отличная особенность.


Подумайте об этом еще немного: вам может не понравиться эта функция так сильно, как вы думаете, если только вы не расширите bash_completionобработчик. Представьте, что хотите открыть file-with-a-long-name.txt, а затем установить

alias o='xdg-open'  

сделаем (около) четырех нажатий клавиш:

o f<Tab><Enter>

Принимая во внимание, что ввод полного имени файла занимает утомительное 26 - и это исключает возврат по неизбежным опечаткам.

zwets
источник