Я использую Ubuntu в Windows после Обновления Создателей, и я заметил, что теперь это может выполнить собственный компонент Windows Exe. Это также включает по умолчанию Windows Path в конце Пути Ubuntu, позволяя Вам получить доступ ко всем утилитам Windows с самого начала.
Единственная проблема состоит в том, что исполняемый файл Windows имеет расширение (.exe), поэтому если, например, я имею 7z для Windows в пути, в ударе я все еще должен ввести
7z.exe
Использовать его.
Я хотел бы установить его в некотором роде для ввода
7z
и он ищет обоих 7z
и 7z.exe
.
Есть ли способ добавить одно или несколько расширений по умолчанию, как высказывание, "если Вы не находите его, поскольку я записал это, попытайтесь добавить это расширение (расширения) в конце"
Если Вы готовы потерять значение по умолчанию command-not-found функции (которые ищут пакеты, обеспечивающие команду, и т.д.), то определите a command_not_found_handle
функция, которая тестирует если a .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 сцепляется в удар для обеспечения доступа к командам Windows (если WSL использует Протестированный на 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
}