De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Julio Cezar Neves
Data de Publicação: 12 de dezembro de 2022
Existe um comando, cuja função primordial é construir listas de parâmetros
e passá-la para a execução de outros programas ou instruções. Este comando
é o xargs
e deve ser usado com a seguinte sintaxe:
xargs [CMD [ARGINI]]
O xargs
combina o argumento inicial ARGINI
de CMD
, com os
argumentos recebidos da entrada padrão, de forma a executar o comando CMD
uma ou mais vezes.
O xargs
tem 2 características:
CMD
com o maior número de parâmetros
possível.
Exemplo
Repare na sequência de comandos a seguir que o comando rm
não aceita,
por segurança, dados oriundos entrada primária e que ele deve pedir uma
confirmação antes de remover um arquivo:
$ ls arq # Arquivo existe arq $ alias rm='rm -i' # Para pedir confirmação anter de remover $ rm arq rm: remover arquivo comum vazio ?arq?? n $ ls arq | rm # rm não aceita dados da entrada primária rm: falta operando Try 'rm --help' for more information. $ ls arq | xargs rm && echo removido removido
No último comando, vimos que o arquivo foi removido sem pedir confirmação. Isso
foi em virtude da 1a característica descrita, isto é, o alias era do Shell, mas
o xargs
passou o comando para execução sem que o Shell se metesse na encrenca.
Um outro exemplo para demonstrar a 2a característica que foi descrita, que ele sempre tenta passar a maior quantidade de parâmetros possíveis:
$ seq 5 1 2 3 4 5 $ seq 5 | xargs 1 2 3 4 5
Como você viu, com o uso do xargs
ele mandou o maior número de parâmetros
possíveis para o comando, que por padrão tinha um echo
implícito.
O xargs
recebe os dados por qualquer entrada primária e não somente via pipe.
Exemplo:
Para criar o diretório dir1
e dir2
podemos fazer:
$ xargs mkdir <<< "dir1 dir2"
Ou:
$ cat direts
dir1
dir2
$ xargs mkdir < direts
Ou até:
$ < direts xargs mkdir
Esse comando tem diversas utilidades que mostrarei muito rapidamente para poder me alongar na última.
Esta opção recebe uma quantidade INT
de parâmetros de cada vez:
Exemplo
$ echo {1..3} # Isto é uma Expansão de Chaves 1 2 3 $ echo {1..3} | xargs -n1 echo Linha Linha 1 Linha 2 Linha 3
Nesse caso o xargs
pegou os parâmetros de entrada um a um (-n1
) e colocou-os
após o ARGINI
(Linha) do comando echo
.
Outro exemplo desta vez vou criar duas colunas, uma só com números ímpares e outra só com pares:
$ echo {1..6} | xargs -n2 # O comando default é o echo
1 2
3 4
5 6
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários