Funciona para funções de escape?

3

Eu tenho uma função definida no meu .bashrc que eu gostaria de ignorar:

function func() {
   // func
}
export -f func

Quando executo env -i func , posso acessar o comando func sem o function no caminho, mas se eu tentar "func" ou \func , não tenho mais sorte.

Eu li em outro post que \ deve funcionar para ignorar funções bash, isso é verdade? Em caso afirmativo, existe alguma razão para que eu não seja capaz de usá-lo neste caso?

    
por Adam Thompson 24.05.2016 / 05:29

4 respostas

3

A maneira oficial de impedir que as definições de função sejam usadas pelo shell é chamar:

command func

Veja: link

    
por 24.05.2016 / 11:01
3

Você pode usar o nome do caminho do seu comando externo "func", por ex. /usr/bin/func .

    
por 24.05.2016 / 11:10
2

Usar uma barra invertida ou outras formas de citar o nome de uma função não tem efeito. Na análise de sintaxe do shell, as funções são pesquisadas depois que as cotações são analisadas.

Você ou a pessoa que escreveu o que leu são funções e aliases confusos. Os aliases são analisados muito antes e a citação de qualquer parte de um nome de comando o torna inelegível para pesquisa de alias. Assim, \func força func a ser uma função, comando interno ou externo, mas não um alias.

Para forçar um nome de comando a ser interpretado como um comando interno ou externo, use command func . Para forçar um nome de comando a ser interpretado como um comando externo, use env func .

    
por 25.05.2016 / 02:06
1

De acordo com a documentação do bash ,

name

A word consisting solely of letters, numbers, and underscores, and beginning with a letter or underscore. Names are used as shell variable and function names. Also referred to as an identifier.

word

A sequence of characters treated as a unit by the shell. Words may not include unquoted metacharacters.

e encontra nomes de funções usando palavras :

If the command name contains no slashes, the shell attempts to locate it. If there exists a shell function by that name, that function is invoked as described in Shell Functions.

apontando na seção sobre Citando (semelhante a POSIX ):

Quoting is used to remove the special meaning of certain characters or words to the shell. Quoting can be used to disable special treatment for special characters, to prevent reserved words from being recognized as such, and to prevent parameter expansion.

Assim como POSIX, bash menciona citações versus aliases, mas não menciona especificamente funções em relação à citação.

Em resumo, não há recurso documentado para citar nomes de função. Se você quiser garantir que você use um comando externo, o uso de barras é o caminho a percorrer. bash e POSIX concordam com isso:

If a simple command results in a command name and an optional list of arguments, the following actions shall be performed:

  1. If the command name does not contain any <slash> characters, the first successful step in the following sequence shall occur:

Ajuda a ler a documentação.

    
por 24.05.2016 / 11:38