Intereting Posts
Проверка подлинности пользователя CentOS7 Что происходит при отправке SIGKILL в Zombie Process в Linux? Как изменить специальный символ в linux с помощью переменной Я не могу выполнить ping мой интерфейс связи при имитации 2 WAN-соединений Включены ли Redhat и CentOS с предустановленной zlib? Как использовать последовательный порт в качестве источника для Syslog? Возможно ли в Linux отключить кэширование файловой системы для определенных файлов? терминал открытия ошибки: xterm-256color 2 дистрибутива / 1 ПК: могу ли я приостановить один из них, а затем загрузиться во второй? Могу ли я создать контейнер Docker из Dockerfile интерактивным способом с выделением некоторого псевдо TTY? EFI не может загрузить Linux Калибровочное направление прокрутки Kali Linux Несколько дистрибутивов Linux или Unix, одинаковый домашний раздел или данные? Корень не может изменять разрешение или право собственности на файл Значки панели запуска lxpanel нарушены

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

Рассмотрим ситуацию, когда я запускаю эти команды в текущей оболочке, или я помещаю их внутри .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 , вам может потребоваться отказаться от идеи восстановления экземпляра оболочки в разумном состоянии.