Добавить расширение по умолчанию в исполняемый поиск

Поскольку UNR был прекращен с Ubuntu 11.04 (вместо этого есть только «настольная версия»), я предполагаю, что вы говорите об интерфейсе Unity по умолчанию - если, конечно, вы не используете Ubuntu 10.10 или 10.04.

Во всяком случае, нет никаких оснований придерживаться Unity для экономии энергии, Unity зависит от аппаратного ускоренного Compiz, который, как правило, достаточно голоден.

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

4
задан 7 August 2017 в 10:08

3 ответа

Если вы захотите потерять неиспользуемые по умолчанию функции (которые просматривают пакеты, предоставляющие команду и т. д.), затем определите функцию command_not_found_handle, которая проверяет, доступна ли версия .exe в PATH:

command_not_found_handle ()
{
    if command -v "$1".exe; then
        "$1".exe "${@:2}";
        return $?;
    else
        return 127;
    fi
}

Например, тестирование с помощью sh вместо .exe:

$ z
z: command not found
$ command_not_found_handle () { if command -v "$1"sh; then "$1"sh "${@:2}"; return $?; else return 127; fi; }
$ z -c 'echo "$@"' _ b c
/usr/bin/zsh
b c
$ ba -c 'echo "$@"' _ b c
/bin/bash
b c

Конечно, это зависит от того, как WSL подключается к bash для обеспечения доступа к командам Windows (если WSL использует command_not_found_handle, то это не сработает).

Исходный, по умолчанию, определение command_not_found_handle находится в /etc/bash.bashrc:

$ tail -15 /etc/bash.bashrc
if [ -x /usr/lib/command-not-found -o -x /usr/share/command-not-found/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/lib/command-not-found -- "$1"
                   return $?
                elif [ -x /usr/share/command-not-found/command-not-found ]; then
                   /usr/share/command-not-found/command-not-found -- "$1"
                   return $?
                else
                   printf "%s: command not found\n" "$1" >&2
                   return 127
                fi
        }
fi

Вы можете просто включите этот код в redifinition:

command_not_found_handle ()
{
    if command -v "$1".exe; then
        "$1".exe "${@:2}";
        return $?;
    else
        # check because c-n-f could've been removed in the meantime
        if [ -x /usr/lib/command-not-found ]; then
           /usr/lib/command-not-found -- "$1"
           return $?
        elif [ -x /usr/share/command-not-found/command-not-found ]; then
           /usr/share/command-not-found/command-not-found -- "$1"
           return $?
        else
           printf "%s: command not found\n" "$1" >&2
           return 127
        fi
    fi
}

Или используйте этот трюк, чтобы автоматически вставить старое определение:

eval "original_$(declare -f command_not_found_handle)"
command_not_found_handle () {
    if command -v "$1".exe; then
        "$1".exe "${@:2}";
        return $?;
    else
        original_command_not_found_handle "$@"
    fi
}
4
ответ дан 22 May 2018 в 19:45
  • 1
    Мне нравится как решение, но потеря оригинальной функциональности - это то, что я бы предпочел избежать. Благодарю. – bracco23 7 August 2017 в 20:45
  • 2
    @ bracco23 обновлен, чтобы сохранить оригинальную функциональность – muru 11 August 2017 в 08:45
  • 3
    Ну, я просто попробовал копию в скопированном виде в моем файле bash.bashrc, и это работает как шарм! Я просто перенаправил вывод command в условие if на /dev/null, чтобы избежать того, чтобы путь был напечатан на экране. Благодаря! – bracco23 11 August 2017 в 17:52
  • 4
    блестящий ...... – WinEunuuchs2Unix 8 October 2017 в 02:55

Если вы захотите потерять неиспользуемые по умолчанию функции (которые просматривают пакеты, предоставляющие команду и т. д.), затем определите функцию command_not_found_handle, которая проверяет, доступна ли версия .exe в PATH:

command_not_found_handle () { if command -v "$1".exe; then "$1".exe "${@:2}"; return $?; else return 127; fi }

Например, тестирование с помощью sh вместо .exe:

$ z z: command not found $ command_not_found_handle () { if command -v "$1"sh; then "$1"sh "${@:2}"; return $?; else return 127; fi; } $ z -c 'echo "$@"' _ b c /usr/bin/zsh b c $ ba -c 'echo "$@"' _ b c /bin/bash b c

Конечно, это зависит от того, как WSL подключается к bash для обеспечения доступа к командам Windows (если WSL использует command_not_found_handle, то это не сработает).

Исходный, по умолчанию, определение command_not_found_handle находится в /etc/bash.bashrc:

$ tail -15 /etc/bash.bashrc if [ -x /usr/lib/command-not-found -o -x /usr/share/command-not-found/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/lib/command-not-found -- "$1" return $? elif [ -x /usr/share/command-not-found/command-not-found ]; then /usr/share/command-not-found/command-not-found -- "$1" return $? else printf "%s: command not found\n" "$1" >&2 return 127 fi } fi

Вы можете просто включите этот код в redifinition:

command_not_found_handle () { if command -v "$1".exe; then "$1".exe "${@:2}"; return $?; else # check because c-n-f could've been removed in the meantime if [ -x /usr/lib/command-not-found ]; then /usr/lib/command-not-found -- "$1" return $? elif [ -x /usr/share/command-not-found/command-not-found ]; then /usr/share/command-not-found/command-not-found -- "$1" return $? else printf "%s: command not found\n" "$1" >&2 return 127 fi fi }

Или используйте этот трюк, чтобы автоматически вставить старое определение:

eval "original_$(declare -f command_not_found_handle)" command_not_found_handle () { if command -v "$1".exe; then "$1".exe "${@:2}"; return $?; else original_command_not_found_handle "$@" fi }
4
ответ дан 18 July 2018 в 08:58

Если вы захотите потерять неиспользуемые по умолчанию функции (которые просматривают пакеты, предоставляющие команду и т. д.), затем определите функцию command_not_found_handle, которая проверяет, доступна ли версия .exe в PATH:

command_not_found_handle () { if command -v "$1".exe; then "$1".exe "${@:2}"; return $?; else return 127; fi }

Например, тестирование с помощью sh вместо .exe:

$ z z: command not found $ command_not_found_handle () { if command -v "$1"sh; then "$1"sh "${@:2}"; return $?; else return 127; fi; } $ z -c 'echo "$@"' _ b c /usr/bin/zsh b c $ ba -c 'echo "$@"' _ b c /bin/bash b c

Конечно, это зависит от того, как WSL подключается к bash для обеспечения доступа к командам Windows (если WSL использует command_not_found_handle, то это не сработает).

Исходный, по умолчанию, определение command_not_found_handle находится в /etc/bash.bashrc:

$ tail -15 /etc/bash.bashrc if [ -x /usr/lib/command-not-found -o -x /usr/share/command-not-found/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/lib/command-not-found -- "$1" return $? elif [ -x /usr/share/command-not-found/command-not-found ]; then /usr/share/command-not-found/command-not-found -- "$1" return $? else printf "%s: command not found\n" "$1" >&2 return 127 fi } fi

Вы можете просто включите этот код в redifinition:

command_not_found_handle () { if command -v "$1".exe; then "$1".exe "${@:2}"; return $?; else # check because c-n-f could've been removed in the meantime if [ -x /usr/lib/command-not-found ]; then /usr/lib/command-not-found -- "$1" return $? elif [ -x /usr/share/command-not-found/command-not-found ]; then /usr/share/command-not-found/command-not-found -- "$1" return $? else printf "%s: command not found\n" "$1" >&2 return 127 fi fi }

Или используйте этот трюк, чтобы автоматически вставить старое определение:

eval "original_$(declare -f command_not_found_handle)" command_not_found_handle () { if command -v "$1".exe; then "$1".exe "${@:2}"; return $?; else original_command_not_found_handle "$@" fi }
4
ответ дан 24 July 2018 в 19:13

Другие вопросы по тегам:

Похожие вопросы: