Enviado em 06/05/2023 - 00:01h
msoliver escreveu:
Boa noite Dark.
A "Coisa" é complicada.....
Se passar dessa forma, dá erro!
./script --user "githubuser" --proj -c"comentario1"
Pega (-c"comentario1"), como opção de "proj"
---------------------------------------------------------
Faz o mesmo com o comentário: "Comentário Padrão".
---------------------------------------------------------------------------------------------------------------
Se Não colocar o "user", ou, user="", user=" " (vazio|espaço)
Mostra ajuda e sai.
---------------------------------------------------------------------------------------------------------------
(($U && $P && $C)) && echo Ok
Foram fornecidos argumentos e opções.
---------------------------------------------------------------------------------------------------------------
Se tem "Restos", foi passada uma opção com "espaços sem aspas"
---------------------------------------------------------------------------------------------------------------
Verifique se atende as necessidades.....
Caso positivo, não esqueça de marcar como resolvido e escolher a Melhor Resposta . . .
Rsrsrsrsrsrs
---------------------------------------------------------------------------------------------------------------
Att.: Marcelo Oliver
______________________________________________________________________
dark777 escreveu:
Mas e se o usuário digitar algo como:
./script -c" " -p"" como eu vço para verificar espaços em branco quando as opçoes forem usadas com as apas duplas assim:
msoliver escreveu:
O erro esta na atribuição da variável:
OPTS=$(getopt -o u:,p:,c:,h --long user:,proj:,commit:,help -n ${0} -- "$@")
______________________________________________________________________
Att.: Marcelo Oliver
______________________________________________________________________
Eu vou ter que mudar a posição das variáveis?O erro esta na atribuição da variável:
OPTS=$(getopt -o u:,p:,c:,h --long user:,proj:,commit:,help -n ${0} -- "$@")
______________________________________________________________________
Att.: Marcelo Oliver
______________________________________________________________________
Mas e se o usuário digitar algo como:
./script -c" " -p"" como eu vço para verificar espaços em branco quando as opçoes forem usadas com as apas duplas assim:
Pq de acododo com algums testes que su fiz se eu fizer:
-c" "
--commit" "
-p" "
--proj" "
-u" "
--user" "
?
Eu mudei as posiçoes deixando assim:
./script -u"githubuser" -p " "
Ele pega o diretório $USER e inicializa o repositório ali fazendo subindo a pasta do usuário como repositório.
E na url que cria o repositório ele cria um repositório com o nome de um traço "-"
Estou tentando tratar estes erros e problemas indiferente da posição em que o usuário use os argumentos e verificar o que foi passado a estes argumentos,
se foi algo como -p " " ou -p"" -proj"projeto1" ou -u"githubuser" ou -u " " ou -u""
wiki.anon
OPTS=$(getopt -o u:,c:,p:,h --long user:,commit:,proj:,help -n ${0} -- "$@")
e ao digitar:
./script --user "githubuser" --proj -c"comentario1"
ele esta criando um repositório na url com o nome "-ccomentario1"
Boa noite Dark.
A "Coisa" é complicada.....
Se passar dessa forma, dá erro!
./script --user "githubuser" --proj -c"comentario1"
Pega (-c"comentario1"), como opção de "proj"
---------------------------------------------------------
./script --user "githubuser" --proj="" -c"comentario1"Preenche a opção de proj com "Projeto Padrão"
Ou
./script --user "githubuser" --proj=" " -c"comentario1"
Faz o mesmo com o comentário: "Comentário Padrão".
---------------------------------------------------------------------------------------------------------------
Se Não colocar o "user", ou, user="", user=" " (vazio|espaço)
Mostra ajuda e sai.
---------------------------------------------------------------------------------------------------------------
(($U && $P && $C)) && echo Ok
Foram fornecidos argumentos e opções.
---------------------------------------------------------------------------------------------------------------
Se tem "Restos", foi passada uma opção com "espaços sem aspas"
---------------------------------------------------------------------------------------------------------------
Verifique se atende as necessidades.....
Caso positivo, não esqueça de marcar como resolvido e escolher a Melhor Resposta . . .
Rsrsrsrsrsrs
---------------------------------------------------------------------------------------------------------------
______________________________________________________________________
#!/usr/bin/env bash
U=0; P=0; C=0;
uso(){
echo -e "Uso: ${s0[2]} (-u|--user) \"usuário\" (-p|--proj) \"nome do projeto\" (-c|--comt) \"aqui os comentários\" | (-h|--help)\n"
exit 0;
}
parsed=$(getopt -a -n "getopt" -o u:p:c:h --long user:,comt:,proj:,help -- "$@");
eval set -- "$parsed";
while :;do
case "$1" in
-c|--comt) C=1;
case "$2" in
""|" ") optc='"Comentário Padrão"';shift 2;;
*) optc=$2;shift 2 ;;
esac ;;
-p|--proj) P=1;
case "$2" in
""|" ") optp='"Projeto Padrão"';shift 2 ;;
*) optp=$2;shift 2 ;;
esac ;;
-u|--user) U=1;
case "$2" in
""|" ") echo "Erro , sem user";uso;;
*) optu=$2;shift 2 ;;
esac ;;
-h|--help) shift;uso;;
--) shift; break ;;
esac
done
## Eficiente
(($U && $P && $C)) && echo -e "\nOK" || echo "Erro, interromper, Requer: User, Proj e Comt."
echo -e "
User: $U [${optu}]
Proj: $P [${optp}]
Comt: $C [${optc}]
Help: $H
Restos: [${@}]";
#Se tem resto, tem algo errado . . .#
[ -z "${@}" ] 2>/dev/null && echo 'OKAY... Nem sempre . . .' || echo 'ERRO'
Att.: Marcelo Oliver
______________________________________________________________________
Seu script é bem mais elaborado sintaticamente em relação a verificar estas opçoes porem,
ao executar algums testes percebi que ele, ainda pega a a opção commit como nome padrão de projeto
Entao se eu executar:
Antes da linha:
./script -p -c"comentario1" -u"teste"
ou
./script --proj --commit"comentario1" --user="teste"
ou
./script --proj --commit="comentario1" --user="github_usuario"
Olha a saida:
./script -u=teste --proj --commit="comentario1"
User $2:teste
Proj $2:--commit=comentario1
OK
User: 1 [teste]
Proj: 1 [--commitcomentario1]
Comt: 1 ["Comentário Padrão"]
Help: 0
Restos: []
OKAY... Nem sempre . . .
Eu adicionei esta linha:
(($U && $P && $C)) && echo -e "\nOK" || echo "Erro, interromper, Requer: User, Proj e Comt."
Eu adicinei estas linha caso o usuário faça:
## Caso não especifique a opção [-c ou --commit] define um comentario padrão para subir o repositório.
if [[ $U -eq 1 && $P -eq 1 && $C -eq 0 ]] ; then
C=1
COMMIT='"Comentário Padrão"'
fi
Para ativar o comentario padrão pois este comentario se o usuário definir ele ou não a url do github irá criar o repositório remoto com o nome que a variavel da opção [-p | --proj] pejar, mas uma vez que o comentario pdrão foi ativado ele fará o commit subindo o repositório para o github indiferente co nome que esta opção [-p|--proj] pegar como argumento.
./script -u=github_usuario -p=projeto1
ou
./script --user=github_user --proj=projeto1
Entao ele não precisaria fazer:
./script -u=github_usuario -p=projeto1 -c ""
ou
./script --user=github_usuario --proj=projeto1 -c " "
Então pelo que eu percebi ainda que façamos isso por causa desta linha:
Este esta sendo o problema que estou tentando entender como resolver através de alguma regex sei la.
(($U && $P && $C)) && echo -e "\nOK" || echo "Erro, interromper, Requer: User, Proj e Comt."
ela mostra que P=1 entao ele criaria um repositório com o nome:
-c=comentario1
ou
--commit=comentario1
ou
-ugithubusuario
ou
--user=githubusuario
Eu tambem tentei fazer algo como:
Para então definir um comentario padrão após esta linha mas ainda temos o problema de o usuário fazer algo como:
(($U && $P && !$C)) && echo -e "\nOK" || echo "Erro, interromper, Requer: User, Proj e Comt."
E na url do github criar repositórios com o nome:
./script --proj --user=usuario1 -c"comentario1"
ou
./script -p -u"usuariogithub"
Ainda existe
--user=usuario1
ou
-uusuariogithub
Localmente no SO nao se pode criar uma pasta com esse nome:
Mas na url do github isso é possivel pois a url que cria os repositórios remotamente só precisa da chave token do usuário github.
-uusuariogithub
ou
--user=usuariogithub
A url que cria os repositórios remotamente é esta:
No script eu tenho que passar o usuário para verificar qual é a chave token dele pois o script é para gerenciar varios usuários github's diferentes em uma estação de trabalho sendo monousuário ou multiusuário.
curl -i -H "Authorization: token TOKEN_GITHUB" -d "{\"name\":\"PROJECT_NAME\",\"private\":false}" https://api.github.com/user/repos
wiki.anon