redirecionando saida de comando touch para o AWK[RESOLVIDO]

13. Re: redirecionando saida de comando touch para o AWK[AJUDA]

aguamole
aguamole

(usa KUbuntu)

Enviado em 28/04/2024 - 11:33h

aguamole escreveu:
Lembrando que a variável especial do shell "${@}" armazena no máximo 9 valores que vai de ${1} a ${9}.

Engano meu, testei aqui e o shell armazeno 30 variáveis especiais, ou seja 30 arquivos foram criados com nome de 1 a 30, agora estou imaginando que as variáveis especiais do shell são infinitas, portanto não tem limite de quantos parâmetros pode ser passado para "tfiles2", ou será que tem, alguém sabe? o limite é a capacidade do computador?

Comando do teste:
$ tfiles2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
A execução foi bem sucedida.


  


14. Re: redirecionando saida de comando touch para o AWK[RESOLVIDO]

Tipoff *tipoff
tipoff

(usa Nenhuma)

Enviado em 28/04/2024 - 14:01h


aguamole escreveu:

aguamole escreveu:
Lembrando que a variável especial do shell "${@}" armazena no máximo 9 valores que vai de ${1} a ${9}.

Engano meu, testei aqui e o shell armazeno 30 variáveis especiais, ou seja 30 arquivos foram criados com nome de 1 a 30, agora estou imaginando que as variáveis especiais do shell são infinitas, portanto não tem limite de quantos parâmetros pode ser passado para "tfiles2", ou será que tem, alguém sabe? o limite é a capacidade do computador?

Comando do teste:
$ tfiles2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
A execução foi bem sucedida.


Não são infinitas, mas a princípio o limite é grande. Criei esse script abaixo (bash_paramaters_limit.sh) para testar:
#!/usr/bin/env bash

let i=0
echo Quantidade de argumentos: $#

for arg; do
echo Argumento \$\{$((i++))\}: $arg
done


O limite atingido aqui foi 75505:
./bash_paramaters_limit.sh $(seq 0 75504) | head -n1
Quantidade de argumentos: 75505


Se eu passo um a mais, ai retorna o erro:
./bash_paramaters_limit.sh $(seq 0 75505) | head -n1
zsh: argument list too long: ./bash_paramaters_limit.sh


Não sei se o limite é por conta do próprio interpretador ou por outro motivo, mas de qualquer forma ninguém cria utilitários para passar milhares de parâmetros neh


15. Re: redirecionando saida de comando touch para o AWK[AJUDA]

aguamole
aguamole

(usa KUbuntu)

Enviado em 28/04/2024 - 14:19h

Usando seu script no Bash e na minha maquina o limite foi:
:/tmp/parameter_limite$ ./parameter.sh $(seq 0 146942) | head -n1
Quantidade de argumentos: 146943

:/tmp/parameter_limite$ ./parameter.sh $(seq 0 146943) | head -n1
/usr/bin/env: ‘bash’: Argument list too long

@tipoff o limite atingido por vc foi no Zsh.


16. Re: redirecionando saida de comando touch para o AWK[RESOLVIDO]

Tipoff *tipoff
tipoff

(usa Nenhuma)

Enviado em 28/04/2024 - 15:19h


aguamole escreveu:
@tipoff o limite atingido por vc foi no Zsh.


O Shebang chama o interpretador bash para executar o script (primeira linha), mas por vias das dúvidas executei diretamente com o bash e a quantidade agora foi de 75506 argumentos, um a mais do que com zsh:
bash-5.2$ ./bash_parameters_limit.sh $(seq 0 75506)
bash: ./bash_parameters_limit.sh: Argument list too long


Evidentemente, esse limite não é fixo. Na sua máquina, a quantidade de argumentos foi maior do que no meu. Isso pode ter relação com a capacidade do hardware também, versão do bash, ou sei lá.


17. Re: redirecionando saida de comando touch para o AWK[AJUDA]

aguamole
aguamole

(usa KUbuntu)

Enviado em 28/04/2024 - 17:32h

Então o shell não usa toda a memória RAM para armazenar os parâmetros, mas pode ser que quanto mais RAM na maquina, mais RAM é disponibilizada para ser usada pelos parâmetros passados.
Isso explica a diferença entre o teste na sua execução e da minha.


18. Re: redirecionando saida de comando touch para o AWK[AJUDA]

aguamole
aguamole

(usa KUbuntu)

Enviado em 28/04/2024 - 21:50h

@dark777 apaga esse código ai e usa este, tem o mesmo efeito, é curto, fácil de entender, e executa bem mais rápido, sendo assim ele é mais eficiente, não sei como não vi isso antes, segue:
alias tfiles2='criar(){ for recebe in "${@}"; do if touch "${recebe}"; then echo "created: ${recebe}"; fi; done }; criar' 

Continua 100% shell.


19. Re: redirecionando saida de comando touch para o AWK[AJUDA] [RESOLVIDO]

Jean César
dark777

(usa Linux Mint)

Enviado em 29/04/2024 - 10:37h

aguamole escreveu:

aguamole escreveu:
Lembrando que a variável especial do shell "${@}" armazena no máximo 9 valores que vai de ${1} a ${9}.

Engano meu, testei aqui e o shell armazeno 30 variáveis especiais, ou seja 30 arquivos foram criados com nome de 1 a 30, agora estou imaginando que as variáveis especiais do shell são infinitas, portanto não tem limite de quantos parâmetros pode ser passado para "tfiles2", ou será que tem, alguém sabe? o limite é a capacidade do computador?

Comando do teste:
$ tfiles2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
A execução foi bem sucedida.


em relação a esta variavel "${@}" quando comecei a estudar parseargs em shell script ela representa o estilo de um array de argumentos nao entendi be como trabalhar com esta variavel em um array ica facil entender que "echo ${array[@]}" mostrará todos os parametros do array ja vi um alias do sçackware para contar os pacotes usando isso "alias pkgs='count(){ ls -1 /var/log/packages/$@ | wc -l ; } count'" mas nunca consegui efetivamente usar este alias no slackware por nao entender direito o funcionamento desde argumento "${@}" sempredava um bug na hora de executar sei la.


wiki.anon



  
01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts