Intereting Posts
Почему для чтения устройства требуется разрешение администратора? извлечение файлов .rar с unrar-free и unar (требуется завершение процесса) и отметкой времени Замените оболочку входа в систему программой (мини-джейл) Как я могу узнать цель различных процессов ядра? Как уменьшить размер языкового архива? Упрощенная обработка параметров сценария оболочки Unix: C-shell: проверка дискового пространства в Hp-UX Как установить сетевой адаптер TP-LINK? Как установить светлые цвета вместо жирного шрифта в PS (приглашение оболочки) что является разделителем по умолчанию для опции sort -k Почему изменения в / etc / passwd не вступают в силу? Изменение и загрузка ядра Linux на мобильном устройстве Кросс-компиляция – архитектура платформы Vs Выровнять шестнадцатеричный текстовый файл по 9 байт каждой строки Редактировать меню Grub без дополнительных инструментов

Как конкретно запускать встроенную команду оболочки

Рассмотрим ситуацию, когда я запускаю эти команды в текущей оболочке, или я помещаю их внутри .bashrc :

 alias source='echo hi' alias .='echo hi' alias unalias='echo hi' 

Или function source(){ echo hi; } function source(){ echo hi; } и т. д.

В случае двоичных команд мы можем использовать абсолютный путь, например: /bin/ls , однако как я могу специально запустить любую из этих встроенных команд оболочки внутри текущей оболочки?

У Bash есть команда, builtin для этого:

 builtin: builtin [shell-builtin [arg ...]] Execute shell builtins. Execute SHELL-BUILTIN with arguments ARGs without performing command lookup. 

Например

 $ cat > hello.sh echo hello $ source() { echo x ; } $ source hello.sh x $ builtin source hello.sh hello 

Однако ничто не мешает вам переопределить builtin .

Другим способом работы с псевдонимами (но не с функциями) является цитата (часть) слова:

 $ alias source="echo x" $ source hello.sh x hello.sh $ \source hello.sh hello 

Псевдонимы всегда можно обойти, процитировав любую часть имени команды, например, \source или 'source' или ''source или …

Функции можно обойти с помощью префикса command (например, command source ) в любой оболочке POSIX. В bash или zsh вы можете использовать builtin command вместо command чтобы принудительно использовать встроенный ( command возвращается к поиску PATH если нет встроенного имени). Вы можете отключить функцию, например, unset -f source .

Если вы переопределили или отключили все builtin , command и не unset , вам может потребоваться отказаться от идеи восстановления экземпляра оболочки в разумном состоянии.