Eu tenho um script bash que usa hub
para criar pull-requests
facilmente. No bash funciona bem, eu apenas digito gpr <base_branch>
e faz a lógica no código.
# git pr
function gpr() {
# exit if no base branch supplied
if [[ ! $1 ]]; then
echo "No base branch supplied. Exiting"
return
fi
if [[ ! $2 ]]; then
echo "Creating pull-request"
echo "No pull-request message set."
read -p "Do you want to use the last commit message as pull-request message. Y or N? " choice
if [[ $choice =~ ^[Yy]$ ]]; then
# Use last commit message
COMMIT=$(git log -1 HEAD --pretty=format:%s)
echo "Using last commit message: $COMMIT"
MESSAGE="-m '$COMMIT'"
else
# Use own message
read -p "Enter message: " message
MESSAGE=-"m '$message'"
fi
fi
COMMAND="hub pull-request -b $1 $MESSAGE"
echo "Creating pull-request against $1 branch with message: $MESSAGE"
eval $COMMAND
echo "Pull-request created successfully"
}
Que no final resultará em hub pull-request -b <base_branch> -m <pull-request message or last commit message>
Mas como faço para converter isso em zsh
?
Tentei colar o código para, .zshrc
mas parece não estar funcionando. Recebo o seguinte ao executargpr <base_branch>
gpr develop
Creating pull-request
No pull-request message set.
gpr:read:10: -p: no coprocess
gpr:read:18: -p: no coprocess
Creating pull-request against develop branch with message: -m ''
And vim appears
No bash, o processo é assim
gpr develop
Creating pull-request
No pull-request message set.
Do you want to use the last commit message as pull-request message. Y or N? y
Using last commit message: [UIUX-x] Commit message
Creating pull-request against develop branch with message: -m '[UIUX-x] Commit message'
https://github.com/<author>/<repo>/pull/<num>
Pull-request created successfully
~/bin/
ou qualquer outra coisa (apenas ajuste suaPATH
direita) com um shebang apontando parabash
?wsl
para que seja mais fácil adicionar minha própria funçãozsh
.gpr
sem linhas:function ...
e o último}
. (2) Faça a primeira linha de um shebang:#!/bin/bash
. (3) Faça o arquivo executável:chmod +x gpr
. (4) Mova o arquivo para o~/bin
diretório. (5) Adicione o~/bin
caminho aPATH
menos que ele já esteja lá. Em seguida,gpr
serão tratadas pelobash
mesmozsh
. Esta não é uma resposta; isso pode resolver seu problema, mas não responde à pergunta.Respostas:
O problema é que a
read
função do zsh usa opções diferentes das do bash. No bash,read -p
especifica um prompt; no zsh, diz para ler de um coprocesso (que não existe). Você precisa mudar para a sintaxe zsh, que coloca o prompt após a variável ser lida (delimitada por um ponto de interrogação):Além disso, eu faria duas outras recomendações (para o bash e o zsh): primeiro, use nomes de variáveis em letras minúsculas ou em letras maiúsculas; existe um grande número de nomes de variáveis all-caps com significado especial para o shell, sistema, etc. (e não são os mesmos entre o bash e o zsh), e é muito fácil reutilizar acidentalmente um deles com nomes estranhos consequências.
Em segundo lugar, a construção do comando em uma variável e, em seguida,
eval
ing é não segura (em qualquer festa ou zsh). Ou utilizar uma matriz , ou simplesmente colocar a mensagem (e apenas a mensagem) numa variável e executar o comando directamente:fonte