Como executar especificamente um comando interno do shell

Como executar especificamente um comando interno do shell

Considere uma situação em que eu executo esses comandos em meu shell atual ou os coloco dentro .bashrc:

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

Ou function source(){ echo hi; }, etc.

No caso de comandos binários, podemos usar o caminho absoluto como: /bin/ls, no entanto, como posso executar especificamente qualquer um desses comandos internos do shell dentro do meu shell atual?

Responder1

Bash tem o comando builtinpara isso:

builtin: builtin [shell-builtin [arg ...]]
Execute shell builtins.

Execute SHELL-BUILTIN with arguments ARGs without performing command
lookup.  

Por exemplo

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

Nada impede que você substitua builtin, no entanto.

Outra maneira de contornar aliases (mas não funções) é citar (parte da) palavra:

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

Responder2

Aliases sempre podem ser ignorados citando qualquer parte do nome do comando, por exemplo, \sourceou ou 'source'ou ''source… (a menos que você tenha definido aliases para aqueles que zsh, mas não outros shells, permitem).

As funções podem ser ignoradas com o commandprefixo (por exemplo command source, ) em qualquer shell POSIX. No bash ou zsh você pode usar builtinem vez de commandforçar o uso de um builtin ( commandvolta para uma PATHpesquisa se não houver nenhum builtin com esse nome, e no zsh (exceto ao emular outros shells), commandignora completamente os builtins). Você pode desarmar uma função com, por exemplo unset -f source, .

Se você substituiu ou desativou todos os builtin, commande unset, talvez seja necessário abandonar a ideia de restaurar essa instância do shell para um estado razoável.

informação relacionada