Pergunta

Eu quero entender o uso de xargs man em :

screen -t man /bin/sh -c 'xargs man || read'

Graças ao Rampion: não precisamos gato

Por que precisamos xargs no comando?

Eu entendo a -part xargs como segue

  1. cat nada a xargs
  2. xargs faz uma lista de homem -commands

Eu tive uma idéia que xargs faz uma lista de comandos. Por exemplo,

find . -type f -print0 | xargs -0 grep masi 

é o mesmo que uma lista de comandos:

find fileA AND grep masi in it 
find fileB AND grep masi in it 
           and so on for fileC, fileD, ...
Foi útil?

Solução

Não, eu não cat nada. cat I qualquer entrada que eu recebo depois de executar o comando. cat é realmente estranho aqui, então vamos ignorá-lo.

xargs man espera na entrada do usuário. Que é necessário. Já que no script que você pegou que a partir, não pode colar no argumento para o homem até depois que eu criar a janela. Assim, o comando que é executado nas necessidades de janela para esperar por mim para dar-lhe alguma coisa, antes que ele tenta executar homem.

Se nós apenas correu screen /bin/sh -d 'man || read', seria sempre queixar "Que página do manual que você quer?" já que nunca disse isso.

Outras dicas

xargs recolhe argumentos de stdin e executa o comando dado com estes argumentos.

para gato está esperando algo ser digitado, e depois xargs está funcionando homem com essa entrada.

xargs é útil se você tem um monte de arquivos para processo, muitas vezes eu usá-lo com saída do achado. xargs vai encher tantos argumentos quanto possível para a linha de comando.
É ótimo para fazer algo como

find . -name '*.o' -print | xargs rm

O comando cat não opera em nada; ele opera na entrada padrão, até que seja dito que a introdução está terminada. Como observa rampion, o comando cat não é necessário aqui, mas ele está operando em sua entrada implícita (entrada padrão), e não sobre nada.

O comando xargs lê a saída do cat e grupos a informação em argumentos para o comando man especificado como seu (apenas) argumento. Quando se atinge um limite (configurável na linha de comando), ele irá executar o comando man.

Os find ... -print0 | xargs -0 ... idiom lida com nomes de arquivos que contenham caracteres estranhas como espaços em branco, tabulações e novas linhas. O comando find imprime cada nome de arquivo seguido por um NUL ASCII ('\0'); este é um dos dois personagens que não podem aparecer em um nome de arquivo simples - o outro ser (que aparece em nomes de caminho, é claro, mas não em nomes de arquivos simples) '/'. Não é diretamente equivalente à sequência que fornecem; Grupos xargs coleções de nomes de arquivos em um único lista de argumentos, até um limite de tamanho. Se os nomes são curtos o suficiente (eles geralmente são), então haverá menos execuções de grep do que há nomes de arquivo.

Note, também, a grep só imprime o nome do arquivo onde o material é encontrado, se tiver mais de um arquivo de pesquisa - ou se ele suporta uma opção para que ele sempre imprime os nomes de arquivo e a opção é usada: '-H' é uma extensão GNU para grep que faz isso. A maneira portátil para garantir que os nomes de arquivo aparecem sempre é a lista /dev/null como o primeiro arquivo (so 'xargs grep something /dev/null'); ele não leva muito tempo para procurar /dev/null.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top