Erro de sintaxe próximo ao token inesperado em uma definição de função bash [closed]

3

Perdoe-me; Eu sou muito novo para arquivos bash e afins. Aqui está uma cópia do meu .bashrc:

alias k='kate 2>/dev/null 1>&2 & disown'

function kk {kate 2>/dev/null 1>&2 & disown}

O alias na primeira linha funciona bem, mas a segunda linha lança:

bash: /home/mozershmozer/.bashrc: line 3: syntax error near unexpected token '{kate'
bash: /home/mozershmozer/.bashrc: line 3: 'function kk {kate 2>/dev/null >1>&2 & disown}'

Estou executando o Linux Mint 17.3 e essas são as duas únicas linhas do meu arquivo .bashrc. Quase tudo o mais na minha máquina é baunilha padrão. Em última análise, eu quero brincar com a função para fazer algumas coisas específicas, mas eu acerto a parede da sintaxe imediatamente. A função exata que listei aqui é apenas uma espécie de manequim experimental que me permite aprender a sintaxe com mais clareza.

    
por MozerShmozer 16.07.2016 / 21:58

2 respostas

5

Em bash e outros shells POSIX, { e } não são exatamente símbolos , pois são palavras especiais neste contexto. Ao criar um comando composto, como em sua definição de função, é importante que eles permaneçam palavras , ou seja, cercados por espaços em branco.

O comando final em uma definição de função de linha única como esta deve ser terminado por um ponto-e-vírgula. Caso contrário, a chave de fechamento } é tratada como um argumento para o comando.

Como um aparte, if você quer que sua função seja portável para outros shells POSIX, é melhor usar uma sintaxe de função diferente:

kk () { kate 2>/dev/null 1>&2 & disown; }

O uso de function é específico de bash , enquanto a forma dada aqui trabalha com bash , assim como outras como sh, Korn e Almquist.

disown também é bash específico.

    
por 16.07.2016 / 22:46
0

Colocá-lo em várias linhas evita ter que colocar o ; extra e dá uma maneira de escrever uma função, mesmo quando ela contém muitos comandos.

function kk {
    kate 2>/dev/null 1>&2 & disown
}
    
por 16.07.2016 / 23:45