Diferenças entre fish e bash para passar argumentos de linha de comando para alias de funções?

6

Das respostas à minha outra pergunta aqui eu aprendi sobre a possibilidade de passar argumentos de linha de comando para uma função de alias no Bash.

No Fish eu posso editar um alias editando o arquivo config.fish no diretório ~/.config/fish e adicionando uma linha como essa

alias lsp='ls -ah --color=always | less -R;'

e funciona perfeitamente. Isso deve ser o equivalente a editar ~/.bash_aliases no bash

Mas quando eu tento configurar uma função de alias para passar argumentos como este

alias lsp='_(){ ls -ah --color=always $* | less -R; }; _'

não funciona para peixe?

Existe alguma diferença entre fish e bash no caminho para configurar um alias para passar argumentos de linha de comando que impeçam esse segundo alias de trabalhar com peixes em vez de bash?

    
por NES 02.01.2011 / 16:12

2 respostas

9

Este segundo comando é na verdade um pequeno script bash. Bash é a linguagem de programação embutida no shell. É usado por outros shells, mas não necessariamente, como vemos aqui.

Fish define uma linguagem de programação completamente diferente do bash , apesar de suportar aliases simples no usual alias name=command form; Você deve definir uma função em seu lugar. É assim que você definiria a função acima em fish:

stefano@lenovo ~> function lsp
                      ls -ah --color=always $argv | less -R
                  end

e funcsave lsp , por isso, salve-o permanentemente.

Agora você pode executar os comandos esperados, como lsp , lsp -R , lsp *.png* e assim por diante.

Você também pode invocar o bash para executar um script para você, usando o programa 'sh' (isso executará 'dash' para ser preciso). Mas se você estiver usando peixe, é provável que queira usar os métodos que ele fornece. Eu testei pela primeira vez, e estou muito impressionado até agora.

As funções são armazenadas como um arquivo em .config/fish/functions/ em seu diretório pessoal. O nome do arquivo será, neste exemplo, lsp.fish . Você pode editar o arquivo, reiniciar o peixe ou apenas definir e salvar a função novamente.

A melhor maneira de aprender peixes é lendo sua ajuda integrada. De dentro de peixe, basta digitar

help

e você terá um manual muito bem formatado, extenso e fácil de ler. Na verdade, isso abre o navegador da web w3m , porque a ajuda está no formato html:

(pressione q-y para sair)

    
por Stefano Palazzo 02.01.2011 / 16:36
2

Eu nunca vi uma engenhoca assim antes.

alias lsp='_(){ ls -ah --color=always $* | less -R; }; _'

Um alias que declara uma função e a executa. Você deveria apenas fazer uma função em primeiro lugar. No bash, as funções substituem os alias em quase todos os aspectos.

lsp() { ls -ah --color=always "$@" | less -R; }

Coloque isso no seu arquivo ~/.bashrc , ou se você preferir colocar funções em um arquivo separado, como ~/.bash_functions , então você pode fazer isso, mas você tem que source desse arquivo de ~/.bashrc

    
por geirha 20.01.2011 / 21:47