Что я могу набрать в своей оболочке (которая, как оказалось bash
, будет), в которой будут перечислены все команды, которые распознаются?
Кроме того, это отличается от оболочки? Или все оболочки имеют только «каталог» команд, которые они распознают?
Во-вторых, другой вопрос, но как я могу переопределить любой из них? Другими словами, как я могу написать свою собственную view
команду, чтобы заменить существующую в моей системе Ubuntu, которая, кажется, просто загружается vim
.
Ответы:
Вы можете использовать
compgen
FYI:
источник
compgen -c
будут включены такие вещи, как{
илиwhile
которые не являются строго говоря командами.Оболочка знает четыре вида команд.
~/.bashrc
для bash).cd
изменяет текущий каталог,set
изменяет параметры и позиционные параметры,export
изменяет среду,…). Большинство оболочек предлагают в основном те же встроенные функции, но каждая оболочка имеет несколько расширений базового набора.PATH
Переменная среды содержит разделенный двоеточиями список каталогов для поиска программ.Если есть команды нескольких типов с одинаковыми именами, выполняется первое совпадение в указанном выше порядке¹.
Вы можете увидеть, какому типу команды соответствует имя, запустив
type some_name
.Вы можете перечислить псевдонимы, запустив
alias
встроенный без аргумента. Нет способа перечислить функции или встроенные функции, которые работают во всех оболочках. Вы можете найти список встроенных функций в документации оболочки.В bash
set
встроенные функции перечисляют функции с их определениями, а также переменными. В bash, ksh или zsh,typeset -f
перечисляет функции с их определениями. В bash вы можете перечислить все имена команд любого типа с помощьюcompgen -c
. Вы можете использоватьcompgen -A alias
,compgen -A builtin
compgen -A function
чтобы получить список команд определенного типа. Вы можете передать дополнительную строку, чтобыcompgen
перечислить только команды, которые начинаются с этого префикса.В Zsh, вы можете получить список доступных в данный момент команд данного типа с
echo ${(k)aliases}
,echo ${(k)functions}
,echo ${(k)builtins}
иecho ${(k)commands}
(только что последними списками внешних команд).В следующем фрагменте, не зависящем от оболочки, перечислены все доступные внешние программы:
В Bash: есть хэшированные команды.
Справочное руководство Bash гласит:
Пытаться:
PATH
Переменная среды не содержит~/dir-for-wat-command
,compgen -c
не показываетwat
, но вы можете запуститьwat
.Если вы хотите скрыть существующую команду, определите псевдоним или функцию .
¹ Исключение: некоторые встроенные функции (называемые специальными встроенными ) не могут быть скрыты какой-либо функцией - хотя bash и zsh не соответствуют POSIX в этой точке в режиме по умолчанию.
источник
$PATH
like/bin:/usr/bin:
(конечный:
), где он не сможет перечислить исполняемые файлы в текущем каталоге.Список команд состоит из двух наборов:
PATH
Вы не можете изменить встроенные модули, но вы можете не использовать встроенную оболочку, указав полный путь, например
/bin/echo
.Что касается команд в вашем
PATH
, вы можете изменить это.PATH
список разделенных двоеточиями каталогов для поиска команд. Первый найденный файл "выиграл".(Этот синтаксис не работает для
csh
-обработанных оболочек, но для всех других, о которых я знаю).То , что экспорт
PATH
с~/bin
первой записью с последующей остальными существующимиPATH
записями. Итак, теперь ваша оболочка проверитdirectory called
binin your home directory for a command *first* before checking the standard
PATH`, настроенную системой. Вы можете легко заставить его проверять новый каталог последним, используя вместо этого:Чтобы
PATH
сохранить для будущих входов в систему, добавьте его в.profile
или другой файл оболочки оболочки.источник
Попробуйте это, используя bash :
источник
Если вы дважды нажмете клавишу Tab, а затем у, вы получите список всех доступных команд в вашей текущей оболочке. Для второго вопроса я думаю, что вы должны использовать псевдоним: псевдоним оболочки .
источник