Função ZSH para editar um arquivo baseado em uma entrada no cli

0

Eu preciso configurar uma função no zsh que edite um arquivo diferente baseado em alguma entrada na linha de comando.

Eu quero simplificar meus aliases para que eu não tenha vários aliases para fazer a mesma coisa, mas com uma pequena variação. Eu estou especificamente tentando configurar uma função para abrir no meu editor diferentes versões do arquivo php.ini (para php 5.4, 5.5, 5.6 e 7.0)

Neste momento, defini os seguintes aliases:

alias editphpini54="subl /usr/local/etc/php/5.4/php.ini"
alias editphpini55="subl /usr/local/etc/php/5.5/php.ini"
alias editphpini56="subl /usr/local/etc/php/5.6/php.ini"
alias editphpini70="subl /usr/local/etc/php/7.0/php.ini"

O que eu gostaria de fazer é configurar uma função chamada editphpini e, em seguida, inserir uma variável (número de versão) e fazer com que ela abra de maneira inteligente o arquivo correto. Isso também poderia ser à prova do futuro, contanto que o caminho básico permaneça o mesmo.

Então, o que eu quero fazer é digitar

editphpini 54

E faça a função analisar esse comando e carregar o arquivo php.ini localizado em /usr/local/etc/php/5.4/php.ini

Usando o exemplo acima, eu seria capaz de substituir 55 56 ou 70 no final do comando e emitiria o comando relevante.

Em minha opinião, a função levaria o número da versão XX , insira-o no comando subl /usr/local/etc/php/X.X/php.ini usando o XX para definir o número da versão.

Honestamente, eu tentei várias coisas, e nada parece funcionar, então, ao invés de listar todas as minhas tentativas fracassadas, eu apreciaria se alguém pudesse me apontar na direção certa.

Obrigado,

Ali

    
por Ali Samii 06.05.2016 / 14:10

2 respostas

1
function editphpini() {
    local version=$( echo $1 | sed 's/^\(.\)/./' )

    subl /usr/local/etc/php/${version}/php.ini
}

uso:

% editphpini 54
    
por 06.05.2016 / 14:14
3
editphpini() subl /usr/local/etc/php/${1[1]}.${1[2,-1]}/php.ini

${1[1]}.${1[2,-1]} é uma das muitas maneiras de transformar xyz em x.yz . Outras abordagens podem ser: ${1[1]}.${1#?} ou ${1/(#m)?/$MATCH.} ou ${(j:.:)${(s::)1}} (para x.y.z )

    
por 06.05.2016 / 14:27