Имена пакетов обрабатываются как описано в документации дляapt-get install
(да, не очевидно):
If no package matches the given expression and the expression contains one of '.', '?' or '*' then it is assumed to be a POSIX regular expression, and it is applied to all package names in the database. Any matches are then installed (or removed). Note that matching is done by substring so 'lo.*' matches 'how-lo' and 'lowest'. If this is undesired, anchor the regular expression with a '^' or '$' character, or create a more specific regular expression.
Строго говоря, эта проверка происходит после выполнения подстановки доступных имен пакетов — поэтому спецификации пакетов сначала проверяются на точное совпадение, затем проверяются на соответствие подстановке (с использованием ?
и *
), и если это ничего не находит, а спецификация пакета содержит .
, ?
или *
, интерпретируемые как регулярные выражения. (Вы можете увидеть поведение подстановки, запустив apt-cache policy 'firefo?'
, который соответствует использованию только подстановки, а затем apt-cache policy 'firefox?'
, который заканчивается использованием регулярного выражения.)
apt-cache policy 'firefox*'
соответствует использованию подстановок. Если вы хотите заставить его соответствовать с помощью регулярного выражения, вы можете вместо этого использовать что-то вроде apt-cache policy 'firefox.*'
; проверьте наличие mozilla-firefox
в выходных данных, чтобы увидеть, соответствует ли выражение глобусу или регулярному выражению.
apt-cache search
задокументирована явно как обработка регулярных выражений, потому что ее аргументы всегда обрабатываются как регулярные выражения.
Учитывая тип поддерживаемых apt
регулярных выражений, исключение -l10n-
, вероятно, невозможно; см. этот ответ SO для получения подробной информации.
У вас много вопросов. Попробуем ответить на них:
Да
type which
для хешированной команды (читайте оhash
))в (lksh, mksh, ksh93 и attsh )и Итак, общего простого ответа не существует.
Всегда порядок выполнения следующий: псевдоним, специальная встроенная -в, (и, после поиска в функции PATH ), обычная встроенная и внешняя утилита.
Для отмены:
Да, как и в Fedora, Debian и многих других. Но все же свое особое слово в этом могут сказать снаряды.
Это больше зависит от того, какую оболочку вы используете, чем от того, какие файлы дистрибутив решит иметь в качестве доступных. Дистрибутив выбирает файлы, оболочка выбирает встроенные модули.
Нет,поскольку приложение является последним исполняемым элементом в последовательности поиска выполнения.
A cd
является обычной встроенной функцией, поэтому она может быть переопределена псевдонимом или функцией (в терминах Posix :, только если исполняемый файл с таким же именем существует в ПУТЬ ).
$ help
alias [-p] [name[=value]... ] logout [n]
bg [job_spec...] mapfile [-d delim] [-n count] [-O or>
bind [-lpsvPSVX] [-m keymap] [-f file> popd [-n] [+N | -N]
break [n] printf [-v var] format [arguments]
builtin [shell-builtin [arg...]] pushd [-n] [+N | -N | dir]
caller [expr] pwd [-LP]
case WORD in [PATTERN [| PATTERN]...)> read [-ers] [-a array] [-d delim] [->
cd [-L|[-P [-e]] [-@]] [dir] readarray [-d delim] [-n count] [-O >
command [-pVv] command [arg...] readonly [-aAf] [name[=value]...] o>
compgen [-abcdefgjksuv] [-o option] [> return [n]
complete [-abcdefgjksuv] [-pr] [-DEI]> select NAME [in WORDS... ;] do COMM>
compopt [-o|+o option] [-DEI] [name.> set [-abefhkmnptuvxBCHP] [-o option->
continue [n] shift [n]
coproc [NAME] command [redirections] shopt [-pqsu] [-o] [optname...]
declare [-aAfFgilnrtux] [-p] [name[=v> source filename [arguments]
dirs [-clpv] [+N] [-N] suspend [-f]
disown [-h] [-ar] [jobspec... | pid > test [expr]
echo [-neE] [arg...] time [-p] pipeline
enable [-a] [-dnps] [-f filename] [na> times
eval [arg...] trap [-lp] [[arg] signal_spec...]
exec [-cl] [-a name] [command [argume> true
exit [n] type [-afptP] name [name...]
export [-fn] [name[=value]...] or ex> typeset [-aAfFgilnrtux] [-p] name[=v>
false ulimit [-SHabcdefiklmnpqrstuvxPT] [l>
fc [-e ename] [-lnr] [first] [last] o> umask [-p] [-S] [mode]
fg [job_spec] unalias [-a] name [name...]
for NAME [in WORDS... ] ; do COMMAND> unset [-f] [-v] [-n] [name...]
for (( exp1; exp2; exp3 )); do COMMAN> until COMMANDS; do COMMANDS; done
function name { COMMANDS ; } or name > variables - Names and meanings of so>
getopts optstring name [arg] wait [-fn] [id...]
hash [-lr] [-p pathname] [-dt] [name > while COMMANDS; do COMMANDS; done
help [-dms] [pattern...] { COMMANDS ; }
root@machinexa:~# help | grep which
root@machinexa:~#
Что не является встроенным bash? Прокомментируйте, если я ошибаюсь Кроме того, чтобы просмотреть путь, выполните env $PATH
, вы также можете проверить, что в каждом пути, например ls /usr/bin/which
, где /usr/bin заменяется всеми путями
Это легко узнать с помощьюwhich
:
В Fedora 32:
$ which which
alias which='(alias; declare -f) | /usr/bin/which --tty-only --read-alias --read-functions --show-tilde --show-dot'
/usr/bin/which
$ rpm -qf /usr/bin/which
which-2.21-19.fc32.x86_64
Итак, отдельная команда.
which
является встроенным -в zsh, но не в большинстве других оболочек. Если вы используете zsh и вызываете which
, он будет использовать встроенную оболочку -, что является типичным поведением, когда команда и встроенная оболочка -имеют одно и то же имя.
Если вы хотите вызвать команду, POSIX предоставляет встроенную command
для этого:command which
. Если вы хотите узнать, где находится команда, в POSIX это можно сделать command -v
.