fish: espaço em branco no alias

4

Eu estou tentando alias um executável em um diretório com um espaço nele. Por exemplo:

alias myfile="/home/ben/test case/myfile"

Agora, isso não é expandido da maneira que eu quero (ele acha que /home/ben/test é o executável). No bash você pode adicionar citações extras:

alias myfile="'/home/ben/test case/myfile'"

Infelizmente, no peixe isso não funciona. O que devo fazer em vez disso?

    
por Ben Ruijl 21.09.2015 / 14:04

3 respostas

3

alias em peixes é apenas um invólucro para função embutida , existia para retrocompatibilidade com o shell POSIX. alias in fish não funcionou como alias POSIX .

Se você quiser o equivalente a POSIX alias , use abbr , que foi adicionado em peixe 2.2.0 :

abbr -a myfile "'/home/ben/test case/myfile'"

ou:

abbr -a myfile "/home/ben/test\ case/myfile"
    
por 21.09.2015 / 16:13
1

Esta resposta é migrada da área de comentários.

fish alias é apenas uma função ingênua para familiaridade que cria funções com esse nome (e por meio de eval ), e não é surpreendente encontrá-lo com bugs. Eu acho melhor você aprender como escrever funções de peixe.

Para o seu exemplo dado, é convertida esta linha de eval :

function myfile --wraps /home/ben/test; /home/ben/test case/myfile $argv; end

Portanto, usar alias myfile="'/home/ben/test case/myfile'" também não ajudará, já que isso dá uma saída estúpida como --wraps 'home/ben/test; '/home/ben/test case/myfile' (veja a única citação solitária!)

Portanto, escreva você mesmo uma função, e você descobrirá que o peixe é um absurdo que arruína a diversão interativa e a simpatia:

function myfile --wraps '/home/ben/test case/myfile'; '/home/ben/test case/myfile' $argv; end

Note que eu não testei isso, e só funciona se eu tiver a idéia da sintaxe correta.

E, na verdade, eu tenho o suficiente do f??????-id??tic-shell em 40 minutos quando leio suas funções internas pela primeira vez.

    
por 21.09.2015 / 15:50
1

Você infelizmente está sendo mordido por um erro no fish , onde os aliases que contêm espaço em branco são quebrado.

Em qualquer caso, é razoavelmente fácil escrever um substituto:

function myfile
    /home/ben/test\ case/myfile $argv;
end
funcsave myfile

Isso definirá uma nova função ( myfile ), definirá o conteúdo para executar seu destino com todos os argumentos da linha de comando ( $argv ) e, em seguida, salvará a função para que seja carregada automaticamente ( funcsave ) .

Como indicado em outra resposta, o comando de abreviação abbr é outra opção para definir aliases, embora no seu caso eu ache que uma função (alias) é realmente mais utilizável.

    
por 21.09.2015 / 16:37