Como executar especificamente um comando interno do shell

1

Considere uma situação em que executo esses comandos no meu shell atual ou os coloco dentro de .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?

    
por Ravexina 30.04.2017 / 10:25

2 respostas

5

Bash tem o comando builtin para 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

No entanto, nada impede que você substitua builtin .

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

$ alias source="echo x"
$ source hello.sh 
x hello.sh
$ \source hello.sh
hello
    
por 30.04.2017 / 10:33
5

Os aliases sempre podem ser omitidos, citando qualquer parte do nome do comando, por exemplo, \source ou 'source' ou ''source ou… (a menos que você tenha definido aliases para esses também quais zsh , mas não outras shells, permite).

As funções podem ser ignoradas com o prefixo command (por exemplo, command source ) em qualquer shell POSIX. No bash ou zsh, é possível usar builtin em vez de command para forçar o uso de uma consulta integrada ( command retorna para PATH se não houver incorporado por esse nome e em zsh (exceto ao emular outros shells), command ignora completamente os builtins). Você pode cancelar uma função com, por exemplo, unset -f source .

Se você tiver substituído ou desativado todos os builtin , command e unset , talvez seja necessário abandonar a idéia de restaurar essa instância de shell para um estado razoável.

    
por 01.05.2017 / 01:00