Comando frequente “template”: remova caracteres de escape de expansão de parâmetro

1

Eu me vejo usando um punhado de comandos longos repetidas vezes com argumentos ligeiramente diferentes. Por exemplo:

rsync -havu --progress --rsh='ssh -l mylogin' some.machine.somewhere:/some/path /some/local/path

Eu gostaria de poder inserir esse comando facilmente no meu prompt zsh e, em seguida, navegar na linha de comando para fazer as alterações necessárias nos caminhos, hosts e logins. Eu configurei um parâmetro zsh:

FOO="rsync -havu --progress --rsh='ssh -l mylogin' some.machine.somewhere:/some/path /some/local/path"

Em seguida, posso expandir $FOO no prompt. No entanto, o comando expandido possui todos os seus espaços e aspas escaparam com barras invertidas. Existe uma maneira de fazer com que zsh não coloque os caracteres de escape na expansão?

Eu sei que posso procurar no meu histórico por comandos semelhantes e depois editá-los - ainda assim teria que digitar uma coisa longa em cada nova shell. Eu também estou aberto a outras maneiras que eu poderia realizar o meu propósito ... Eu poderia escrever um script python ou algo assim, mas isso parece ser muito sobrecarga para uma tarefa bastante simples.

    
por Timothy W. Hilton 13.01.2013 / 02:56

1 resposta

1

Eu recomendaria usar uma função que aceita parâmetros para as opções que você normalmente altera. Você pode colocar isso na sua configuração do ZSH e executá-lo de forma interativa. Aqui está um exemplo:

myrsync() {
   username=$1
   srchost=$2
   srcpath=$3
   destpath=$4
   rsync -havu --progress --rsh="ssh -l $username" "${srchost}:${srcpath}" "$destpath"
}

myrsync mylogin some.machine.somewhere /some/path /some/local/path
    
por 13.01.2013 / 07:28